diff options
author | unknown <monty@mysql.com/narttu.mysql.fi> | 2008-03-04 17:13:34 +0200 |
---|---|---|
committer | unknown <monty@mysql.com/narttu.mysql.fi> | 2008-03-04 17:13:34 +0200 |
commit | 09e4e954c36663bb7824b9b8b5daff706f53a2a6 (patch) | |
tree | 9e10c98a209dd0ecefc7b4e3b81d5c549ec3c088 /strings/strmake.c | |
parent | 79ca1004cb5c5470569e03f6200b351a3e390bbc (diff) | |
download | mariadb-git-09e4e954c36663bb7824b9b8b5daff706f53a2a6.tar.gz |
Fixed crashing bug when starting mysqld with --dbug
Fixed crash when using other maria block size than 8192
Fixed bug that caused tables to be reported as crashed if maria_log_control was deleted
mysql-test/valgrind.supp:
Suppress leaks on SuSE 10.3, x86 64 bit
sql/mysqld.cc:
Don't give warning in case of timeout for pthread_cond_timedwait
Fixed crashing bug when starting mysqld with --dbug
storage/maria/ha_maria.cc:
Fixed crash when using other block size than 8192 (Crash happend later in bitmap page handling)
storage/maria/ma_locking.c:
When we write a new uuid for a zerofilled file, also update the lsn's
storage/maria/ma_open.c:
Don't update lsn on open. Wait until first time file is changed
Fixed bug that caused tables to be reported as crashed if maria_log_control was deleted
strings/strmake.c:
Fixed warnings for strings without end 0 when running under valgrind.
Diffstat (limited to 'strings/strmake.c')
-rw-r--r-- | strings/strmake.c | 46 |
1 files changed, 29 insertions, 17 deletions
diff --git a/strings/strmake.c b/strings/strmake.c index df8d78e8476..903a1b83626 100644 --- a/strings/strmake.c +++ b/strings/strmake.c @@ -29,26 +29,38 @@ char *strmake(register char *dst, register const char *src, size_t length) { -#ifdef EXTRA_DEBUG - /* - 'length' is the maximum length of the string; the buffer needs - to be one character larger to accomodate the terminating '\0'. - This is easy to get wrong, so we make sure we write to the - entire length of the buffer to identify incorrect buffer-sizes. - We only initialise the "unused" part of the buffer here, a) for - efficiency, and b) because dst==src is allowed, so initialising - the entire buffer would overwrite the source-string. Also, we - write a character rather than '\0' as this makes spotting these - problems in the results easier. - */ - uint n= strlen(src) + 1; - if (n <= length) - memset(dst + n, (int) 'Z', length - n + 1); -#endif - while (length--) + { if (! (*dst++ = *src++)) + { +#ifdef EXTRA_DEBUG + /* + 'length' is the maximum length of the string; the buffer needs + to be one character larger to accommodate the terminating + '\0'. This is easy to get wrong, so we make sure we write to + the entire length of the buffer to identify incorrect + buffer-sizes. We only initialism the "unused" part of the + buffer here, a) for efficiency, and b) because dst==src is + allowed, so initializing the entire buffer would overwrite the + source-string. Also, we write a character rather than '\0' as + this makes spotting these problems in the results easier. + + If we are using purify/valgrind, we only set one character at + end to be able to detect also wrong accesses after the end of + dst. + */ + if (length) + { +#ifdef HAVE_purify + dst[length-1]= 'Z'; +#else + bfill(dst, length-1, (int) 'Z'); +#endif /* HAVE_purify */ + } +#endif /* EXTRA_DEBUG */ return dst-1; + } + } *dst=0; return dst; } |