diff --git a/src/pulsecore/tagstruct.c b/src/pulsecore/tagstruct.c index 92bace277..fb412a4a2 100644 --- a/src/pulsecore/tagstruct.c +++ b/src/pulsecore/tagstruct.c @@ -570,10 +570,11 @@ int pa_tagstruct_get_proplist(pa_tagstruct *t, pa_proplist *p) { return -1; saved_rindex = t->rindex; + t->rindex++; for (;;) { const char *k; - void *d; + const void *d; uint32_t length; if (pa_tagstruct_gets(t, &k) < 0) @@ -588,17 +589,11 @@ int pa_tagstruct_get_proplist(pa_tagstruct *t, pa_proplist *p) { if (length > MAX_TAG_SIZE) goto fail; - d = pa_xmalloc(length); - - if (pa_tagstruct_get_arbitrary(t, d, length) < 0) + if (pa_tagstruct_get_arbitrary(t, &d, length) < 0) goto fail; - if (pa_proplist_set(p, k, d, length) < 0) { - pa_xfree(d); + if (pa_proplist_set(p, k, d, length) < 0) goto fail; - } - - pa_xfree(d); } return 0; diff --git a/src/pulsecore/tagstruct.h b/src/pulsecore/tagstruct.h index 8846b3017..8699e6c8c 100644 --- a/src/pulsecore/tagstruct.h +++ b/src/pulsecore/tagstruct.h @@ -33,6 +33,9 @@ #include #include #include +#include + +#include typedef struct pa_tagstruct pa_tagstruct;