diff --git a/client/mysqldump.c b/client/mysqldump.c
index e9e3124b9cb..56d6c12981f 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -808,7 +808,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
                                     &err_ptr, &err_len);
       if (err_len)
       {
-        strmake(buff, err_ptr, min(sizeof(buff), err_len));
+        strmake(buff, err_ptr, min(sizeof(buff) - 1, err_len));
         fprintf(stderr, "Invalid mode to --compatible: %s\n", buff);
         exit(1);
       }
@@ -4486,7 +4486,7 @@ static ulong find_set(TYPELIB *lib, const char *x, uint length,
 
       for (; pos != end && *pos != ','; pos++) ;
       var_len= (uint) (pos - start);
-      strmake(buff, start, min(sizeof(buff), var_len));
+      strmake(buff, start, min(sizeof(buff) - 1, var_len));
       find= find_type(buff, lib, var_len);
       if (!find)
       {
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index aa314e79260..f626361536f 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -718,7 +718,10 @@ my_bool	STDCALL mysql_change_user(MYSQL *mysql, const char *user,
   if (!passwd)
     passwd="";
 
-  /* Store user into the buffer */
+  /*
+    Store user into the buffer.
+    Advance position as strmake returns a pointer to the closing NUL.
+  */
   end= strmake(end, user, USERNAME_LENGTH) + 1;
 
   /* write scrambled password according to server capabilities */
@@ -1268,7 +1271,7 @@ mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)
 {
   MYSQL_RES   *result;
   MYSQL_FIELD *fields;
-  char	     buff[257],*end;
+  char	     buff[258],*end;
   DBUG_ENTER("mysql_list_fields");
   DBUG_PRINT("enter",("table: '%s'  wild: '%s'",table,wild ? wild : ""));
 
diff --git a/mysys/default.c b/mysys/default.c
index 1c021b4584f..4e9d4faae91 100644
--- a/mysys/default.c
+++ b/mysys/default.c
@@ -650,7 +650,7 @@ static int search_default_file_with_ext(Process_option_func opt_handler,
                                         int recursion_level)
 {
   char name[FN_REFLEN + 10], buff[4096], curr_gr[4096], *ptr, *end, **tmp_ext;
-  char *value, option[4096], tmp[FN_REFLEN];
+  char *value, option[4096+2], tmp[FN_REFLEN];
   static const char includedir_keyword[]= "includedir";
   static const char include_keyword[]= "include";
   const int max_recursion_level= 10;
diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c
index 9775a842b18..c13a5581b80 100644
--- a/mysys/mf_pack.c
+++ b/mysys/mf_pack.c
@@ -245,7 +245,7 @@ my_bool my_use_symdir=0;	/* Set this if you want to use symdirs */
 #ifdef USE_SYMDIR
 void symdirget(char *dir)
 {
-  char buff[FN_REFLEN];
+  char buff[FN_REFLEN+1];
   char *pos=strend(dir);
   if (dir[0] && pos[-1] != FN_DEVCHAR && my_access(dir, F_OK))
   {
@@ -257,7 +257,7 @@ void symdirget(char *dir)
     *pos++=temp; *pos=0;	  /* Restore old filename */
     if (file >= 0)
     {
-      if ((length= my_read(file, buff, sizeof(buff), MYF(0))) > 0)
+      if ((length= my_read(file, buff, sizeof(buff) - 1, MYF(0))) > 0)
       {
 	for (pos= buff + length ;
 	     pos > buff && (iscntrl(pos[-1]) || isspace(pos[-1])) ;
diff --git a/server-tools/instance-manager/listener.cc b/server-tools/instance-manager/listener.cc
index 4d8a33e7db1..3374776b2a0 100644
--- a/server-tools/instance-manager/listener.cc
+++ b/server-tools/instance-manager/listener.cc
@@ -272,7 +272,7 @@ create_unix_socket(struct sockaddr_un &unix_socket_address)
 
   unix_socket_address.sun_family= AF_UNIX;
   strmake(unix_socket_address.sun_path, Options::Main::socket_file_name,
-          sizeof(unix_socket_address.sun_path));
+          sizeof(unix_socket_address.sun_path) - 1);
   unlink(unix_socket_address.sun_path); // in case we have stale socket file
 
   /*
diff --git a/sql/log.cc b/sql/log.cc
index 2fd29588922..36d57271a7d 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -2420,7 +2420,7 @@ const char *MYSQL_LOG::generate_name(const char *log_name,
   {
     char *p= fn_ext(log_name);
     uint length= (uint) (p - log_name);
-    strmake(buff, log_name, min(length, FN_REFLEN));
+    strmake(buff, log_name, min(length, FN_REFLEN-1));
     return (const char*)buff;
   }
   return log_name;
@@ -3669,7 +3669,7 @@ int MYSQL_BIN_LOG::purge_logs_before_date(time_t purge_time)
       if (stat_area.st_mtime < purge_time) 
         strmake(to_log, 
                 log_info.log_file_name, 
-                sizeof(log_info.log_file_name));
+                sizeof(log_info.log_file_name) - 1);
       else
         break;
     }
@@ -5021,11 +5021,11 @@ bool flush_error_log()
   if (opt_error_log)
   {
     char err_renamed[FN_REFLEN], *end;
-    end= strmake(err_renamed,log_error_file,FN_REFLEN-4);
+    end= strmake(err_renamed,log_error_file,FN_REFLEN-5);
     strmov(end, "-old");
     VOID(pthread_mutex_lock(&LOCK_error_log));
 #ifdef __WIN__
-    char err_temp[FN_REFLEN+4];
+    char err_temp[FN_REFLEN+5];
     /*
      On Windows is necessary a temporary file for to rename
      the current error file.
diff --git a/sql/sp_pcontext.h b/sql/sp_pcontext.h
index 3145ba2fea4..75e55880e60 100644
--- a/sql/sp_pcontext.h
+++ b/sql/sp_pcontext.h
@@ -71,7 +71,7 @@ typedef struct sp_label
 typedef struct sp_cond_type
 {
   enum { number, state, warning, notfound, exception } type;
-  char sqlstate[6];
+  char sqlstate[SQLSTATE_LENGTH+1];
   uint mysqlerr;
 } sp_cond_type_t;
 
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index b30c012e633..7d8f8ea71b3 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -1061,7 +1061,7 @@ int acl_getroot(THD *thd, USER_RESOURCES  *mqh,
     *mqh= acl_user->user_resource;
 
     if (acl_user->host.hostname)
-      strmake(sctx->priv_host, acl_user->host.hostname, MAX_HOSTNAME);
+      strmake(sctx->priv_host, acl_user->host.hostname, MAX_HOSTNAME - 1);
     else
       *sctx->priv_host= 0;
   }
@@ -1162,7 +1162,7 @@ bool acl_getroot_no_password(Security_context *sctx, char *user, char *host,
     sctx->priv_user= acl_user->user ? user : (char *) "";
 
     if (acl_user->host.hostname)
-      strmake(sctx->priv_host, acl_user->host.hostname, MAX_HOSTNAME);
+      strmake(sctx->priv_host, acl_user->host.hostname, MAX_HOSTNAME - 1);
     else
       *sctx->priv_host= 0;
   }
diff --git a/sql/sql_connect.cc b/sql/sql_connect.cc
index bb4ba2bf21b..16f11fe22c4 100644
--- a/sql/sql_connect.cc
+++ b/sql/sql_connect.cc
@@ -705,7 +705,7 @@ static int check_connection(THD *thd)
   ulong server_capabilites;
   {
     /* buff[] needs to big enough to hold the server_version variable */
-    char buff[SERVER_VERSION_LENGTH + SCRAMBLE_LENGTH + 64];
+    char buff[SERVER_VERSION_LENGTH + 1 + SCRAMBLE_LENGTH + 1 + 64];
     server_capabilites= CLIENT_BASIC_FLAGS;
 
     if (opt_using_transactions)
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 869ae42c98c..3b7354111ba 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -2575,7 +2575,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
 	!(sql_field->charset= get_charset_by_csname(sql_field->charset->csname,
 						    MY_CS_BINSORT,MYF(0))))
     {
-      char tmp[64];
+      char tmp[65];
       strmake(strmake(tmp, save_cs->csname, sizeof(tmp)-4),
               STRING_WITH_LEN("_bin"));
       my_error(ER_UNKNOWN_COLLATION, MYF(0), tmp);