mirror of
https://github.com/MariaDB/server.git
synced 2025-04-02 05:15:33 +02:00
BUG#20622: Fix one-byte buffer overrun in IM directory string handling.
The problem was a call to convert_dirname() with a destination buffer that did not have room for the trailing slash added by that function. This could cause the instance manager to crash in some cases. mysys/mf_dirname.c: Clarify in comments that convert_dirname destination must be larger than source to accomodate a trailing slash. server-tools/instance-manager/instance_options.cc: Fix buffer overrun.
This commit is contained in:
parent
39246e2fa7
commit
0f3cc95bf1
2 changed files with 10 additions and 3 deletions
|
@ -72,7 +72,9 @@ uint dirname_part(my_string to, const char *name)
|
|||
|
||||
SYNPOSIS
|
||||
convert_dirname()
|
||||
to Store result here
|
||||
to Store result here. Must be at least of size
|
||||
min(FN_REFLEN, strlen(from) + 1) to make room
|
||||
for adding FN_LIBCHAR at the end.
|
||||
from Original filename
|
||||
from_end Pointer at end of filename (normally end \0)
|
||||
|
||||
|
|
|
@ -391,8 +391,13 @@ int Instance_options::complete_initialization(const char *default_path,
|
|||
const char *tmp;
|
||||
char *end;
|
||||
|
||||
if (!mysqld_path && !(mysqld_path= strdup_root(&alloc, default_path)))
|
||||
goto err;
|
||||
if (!mysqld_path)
|
||||
{
|
||||
// Need one extra byte, as convert_dirname() adds a slash at the end.
|
||||
if (!(mysqld_path= alloc_root(&alloc, strlen(default_path) + 2)))
|
||||
goto err;
|
||||
strcpy((char *)mysqld_path, default_path);
|
||||
}
|
||||
|
||||
// it's safe to cast this to char* since this is a buffer we are allocating
|
||||
end= convert_dirname((char*)mysqld_path, mysqld_path, NullS);
|
||||
|
|
Loading…
Add table
Reference in a new issue