mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
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.
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user