From fd70d5e904c06ea0171f450b234fbec8d343629e Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Tue, 16 Sep 2008 13:16:41 +0200 Subject: [PATCH] Bug#35987 - post-review fix Correct usage of strncat() in get_symbol_path() 3rd parameter to strncat is changed to be count of remaining bytes in the output buffer minus 1. --- sql/stacktrace.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sql/stacktrace.c b/sql/stacktrace.c index 1e112418cf8..4e6ad68c172 100644 --- a/sql/stacktrace.c +++ b/sql/stacktrace.c @@ -391,7 +391,12 @@ static void get_symbol_path(char *path, size_t size) if (!strstr(path, module_dir)) { - strncat(path, module_dir, size); + size_t dir_len = strlen(module_dir); + if (size > dir_len) + { + strncat(path, module_dir, size-1); + size -= dir_len; + } } } CloseHandle(hSnap); @@ -399,9 +404,9 @@ static void get_symbol_path(char *path, size_t size) /* Add _NT_SYMBOL_PATH, if present. */ envvar= getenv("_NT_SYMBOL_PATH"); - if(envvar) + if(envvar && size) { - strncat(path, envvar, size); + strncat(path, envvar, size-1); } } @@ -423,7 +428,7 @@ void print_stacktrace(gptr unused1, ulong unused2) int i; CONTEXT context; STACKFRAME64 frame={0}; - static char symbol_path[MAX_SYMBOL_PATH+1]; + static char symbol_path[MAX_SYMBOL_PATH]; if(!exception_ptrs || !init_dbghelp_functions()) return; @@ -432,7 +437,7 @@ void print_stacktrace(gptr unused1, ulong unused2) context = *(exception_ptrs->ContextRecord); /*Initialize symbols.*/ pSymSetOptions(SYMOPT_LOAD_LINES|SYMOPT_NO_PROMPTS|SYMOPT_DEFERRED_LOADS|SYMOPT_DEBUG); - get_symbol_path(symbol_path, MAX_SYMBOL_PATH); + get_symbol_path(symbol_path, sizeof(symbol_path)); pSymInitialize(hProcess, symbol_path, TRUE); /*Prepare stackframe for the first StackWalk64 call*/