summaryrefslogtreecommitdiff
path: root/strings/my_vsnprintf.c
diff options
context:
space:
mode:
authorunknown <bar@mysql.com/bar.myoffice.izhnet.ru>2007-05-30 14:03:35 +0500
committerunknown <bar@mysql.com/bar.myoffice.izhnet.ru>2007-05-30 14:03:35 +0500
commit42eab5a2b1824ad0896100259441a881deff4378 (patch)
tree7d98ca60a6020ebd5c9ac68a51d13eb13a0a7aaa /strings/my_vsnprintf.c
parentb3949122b1f9003189ea46faff82bb13596baaf1 (diff)
downloadmariadb-git-42eab5a2b1824ad0896100259441a881deff4378.tar.gz
Fixing wrong memory read problem detected by Valgrind in "xml" test.
The source of the problem was in my_vsnprintf() implementation. strings/my_vsnprintf.c: Fixing a problem in vsnprintf('%.*s', len, ptr) When processing the above format, it's incorrect to use strlen() because the string is not necessarily a null terminated string. Changing strlen() followed by set_if_smaller() to strnlen() - which covers both cases - limiting by '\0' and by "len".
Diffstat (limited to 'strings/my_vsnprintf.c')
-rw-r--r--strings/my_vsnprintf.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c
index 93d228a1954..befdb1a81c2 100644
--- a/strings/my_vsnprintf.c
+++ b/strings/my_vsnprintf.c
@@ -95,8 +95,7 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
reg2 char *par = va_arg(ap, char *);
uint plen,left_len = (uint)(end-to)+1;
if (!par) par = (char*)"(null)";
- plen = (uint) strlen(par);
- set_if_smaller(plen,width);
+ plen= (uint) strnlen(par, width);
if (left_len <= plen)
plen = left_len - 1;
to=strnmov(to,par,plen);