diff --git a/innobase/fil/fil0fil.c b/innobase/fil/fil0fil.c
index 3b033655856278c2a2891b94070888c7b484f421..539e6aa8687ec88b6b11e6614429aa2a3abb3b90 100644
--- a/innobase/fil/fil0fil.c
+++ b/innobase/fil/fil0fil.c
@@ -2572,11 +2572,30 @@ fil_load_single_table_tablespace(
 
 	        fprintf(stderr,
 "InnoDB: Error: could not open single-table tablespace file\n"
-"InnoDB: %s!\n", filepath);
+"InnoDB: %s!\n"
+"InnoDB: We do no continue crash recovery, because the table will become\n"
+"InnoDB: corrupt if we cannot apply the log records in the InnoDB log to it.\n"
+"InnoDB: To fix the problem and start mysqld:\n"
+"InnoDB: 1) If there is a permission problem in the file and mysqld cannot\n"
+"InnoDB: open the file, you should modify the permissions.\n"
+"InnoDB: 2) If the table is not needed, or you can restore it from a backup,\n"
+"InnoDB: then you can remove the .ibd file, and InnoDB will do a normal\n"
+"InnoDB: crash recovery and ignore that table.\n"
+"InnoDB: 3) If the file system or the disk is broken, and you cannot remove\n"
+"InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf\n"
+"InnoDB: and force InnoDB to continue crash recovery here.\n", filepath);
 
 		ut_free(filepath);
 
-		return;
+		if (srv_force_recovery > 0) {
+			fprintf(stderr,
+"InnoDB: innodb_force_recovery was set to %lu. Continuing crash recovery\n"
+"InnoDB: even though we cannot access the .ibd file of this table.\n",
+							srv_force_recovery);
+			return;
+		}
+
+		exit(1);
 	}
 
 	success = os_file_get_size(file, &size_low, &size_high);
@@ -2587,14 +2606,36 @@ fil_load_single_table_tablespace(
 
 	        fprintf(stderr,
 "InnoDB: Error: could not measure the size of single-table tablespace file\n"
-"InnoDB: %s!\n", filepath);
+"InnoDB: %s!\n"
+"InnoDB: We do no continue crash recovery, because the table will become\n"
+"InnoDB: corrupt if we cannot apply the log records in the InnoDB log to it.\n"
+"InnoDB: To fix the problem and start mysqld:\n"
+"InnoDB: 1) If there is a permission problem in the file and mysqld cannot\n"
+"InnoDB: access the file, you should modify the permissions.\n"
+"InnoDB: 2) If the table is not needed, or you can restore it from a backup,\n"
+"InnoDB: then you can remove the .ibd file, and InnoDB will do a normal\n"
+"InnoDB: crash recovery and ignore that table.\n"
+"InnoDB: 3) If the file system or the disk is broken, and you cannot remove\n"
+"InnoDB: the .ibd file, you can set innodb_force_recovery > 0 in my.cnf\n"
+"InnoDB: and force InnoDB to continue crash recovery here.\n", filepath);
 
 		os_file_close(file);
 		ut_free(filepath);
 
-		return;
+		if (srv_force_recovery > 0) {
+			fprintf(stderr,
+"InnoDB: innodb_force_recovery was set to %lu. Continuing crash recovery\n"
+"InnoDB: even though we cannot access the .ibd file of this table.\n",
+							srv_force_recovery);
+			return;
+		}
+
+		exit(1);
 	}
 
+	/* TODO: What to do in other cases where we cannot access an .ibd
+	file during a crash recovery? */
+
 	/* Every .ibd file is created >= 4 pages in size. Smaller files
 	cannot be ok. */
 
diff --git a/sql/password.c b/sql/password.c
index 49f149969c99c4fcf982863116476bf1e529dc45..0ac91346a55dd12eba7dfe20b45e27aca8f46df3 100644
--- a/sql/password.c
+++ b/sql/password.c
@@ -218,6 +218,8 @@ check_scramble_323(const char *scrambled, const char *message,
   to=buff;
   for (pos=scrambled ; *pos ; pos++)
     *to++=(char) (floor(my_rnd(&rand_st)*31)+64);
+  if (pos-scrambled != SCRAMBLE_LENGTH_323)
+    return 1;
   extra=(char) (floor(my_rnd(&rand_st)*31));
   to=buff;
   while (*scrambled)
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index d5becf81771a36adb991ef9fa124aed15e1b8b97..9d1eb7bc54d4e94a600d213a224116cd2489a915 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -629,10 +629,10 @@ int acl_getroot(THD *thd, USER_RESOURCES  *mqh,
         if (passwd_len == acl_user_tmp->salt_len)
         {
           if (acl_user_tmp->salt_len == 0 ||
-              acl_user_tmp->salt_len == SCRAMBLE_LENGTH &&
-              check_scramble(passwd, thd->scramble, acl_user_tmp->salt) == 0 ||
+              (acl_user_tmp->salt_len == SCRAMBLE_LENGTH ?
+              check_scramble(passwd, thd->scramble, acl_user_tmp->salt) :
               check_scramble_323(passwd, thd->scramble,
-                                 (ulong *) acl_user_tmp->salt) == 0)
+                                 (ulong *) acl_user_tmp->salt)) == 0)
           {
             acl_user= acl_user_tmp;
             res= 0;