]> code.delx.au - pulseaudio/commitdiff
fix pa_xstrndup() implementation to not access potentially uninitialized memory
authorLennart Poettering <lennart@poettering.net>
Sat, 3 Jun 2006 00:59:24 +0000 (00:59 +0000)
committerLennart Poettering <lennart@poettering.net>
Sat, 3 Jun 2006 00:59:24 +0000 (00:59 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1006 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/polyp/xmalloc.c

index ffc7f7c81022b4b4b4d6a149641ee5efc3eab270..7f71a5edfdf5cdc25ae80050632a3c84c21bd7ab 100644 (file)
@@ -106,19 +106,18 @@ char *pa_xstrdup(const char *s) {
 }
 
 char *pa_xstrndup(const char *s, size_t l) {
+    char *e, *r;
+    
     if (!s)
         return NULL;
-    else {
-        char *r;
-        size_t t = strlen(s);
 
-        if (t > l)
-            t = l;
-        
-        r = pa_xmemdup(s, t+1);
-        r[t] = 0;
-        return r;
-    }
+    if ((e = memchr(s, 0, l)))
+        return pa_xmemdup(s, e-s+1);
+
+    r = pa_xmalloc(l+1);
+    memcpy(r, s, l);
+    r[l] = 0;
+    return r;
 }
 
 void pa_xfree(void *p) {