summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-06-03 00:59:24 +0000
committerLennart Poettering <lennart@poettering.net>2006-06-03 00:59:24 +0000
commit2fa08ba9aac87f75751bc57bf153a2905699584d (patch)
tree8cacb379c63a870f7eea9fe949f362afcf763be9 /src
parent16a275a9fddcf9216941cae4a002f0902ae5df88 (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')
-rw-r--r--src/polyp/xmalloc.c19
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) {