From 861096a58f9c3f246d8a7b448601a422c8e04f26 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 1 Jul 2006 14:31:52 -0400 Subject: Bug#19006: 4.0 valgrind problems (in test func_str) On exactly-sized Strings, the String::c_ptr() function peeked beyond the end of the buffer, possibly into unititialized space to see whether the buffer was NUL-terminated. In a place that did peek improperly, we now use a c_ptr_safe() function, which doesn't peek where it shouldn't. client/sql_string.h: Back-port String::c_ptr_safe(). sql/item_func.h: Describe side-effect behavior. sql/item_strfunc.cc: Use the "_safe" version of c_ptr to avoid looking for a terminating NUL character outside the initialized memory area. Valgrind hates it when one does that, and it theoretically could lead to a SEGV. sql/sql_string.h: Back-port String::c_ptr_safe(). --- client/sql_string.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'client/sql_string.h') diff --git a/client/sql_string.h b/client/sql_string.h index cffe78936a0..13687eef4dc 100644 --- a/client/sql_string.h +++ b/client/sql_string.h @@ -67,6 +67,14 @@ public: Ptr[str_length]=0; return Ptr; } + inline char *c_ptr_safe() + { + if (Ptr && str_length < Alloced_length) + Ptr[str_length]=0; + else + (void) realloc(str_length); + return Ptr; + } void set(String &str,uint32 offset,uint32 arg_length) { -- cgit v1.2.1