diff options
author | Lennart Poettering <lennart@poettering.net> | 2006-06-03 00:59:24 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2006-06-03 00:59:24 +0000 |
commit | 2fa08ba9aac87f75751bc57bf153a2905699584d (patch) | |
tree | 8cacb379c63a870f7eea9fe949f362afcf763be9 /src/polyp | |
parent | 16a275a9fddcf9216941cae4a002f0902ae5df88 (diff) |
fix pa_xstrndup() implementation to not access potentially uninitialized memory
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1006 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/polyp')
-rw-r--r-- | src/polyp/xmalloc.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/polyp/xmalloc.c b/src/polyp/xmalloc.c index ffc7f7c8..7f71a5ed 100644 --- a/src/polyp/xmalloc.c +++ b/src/polyp/xmalloc.c @@ -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) { |