player: don't set tag strings to NULL

bstr is a bounded string type, consisting of a pointer and a length
value. If the length is 0, the pointer can be NULL. This is somewhat
logical due to how this abstraction works, but it can leak when
converting to C strings.

talloc_strndup() returns NULL instead of "" in this case, which broke
some other code. Use bstrto0() instead, which is the "proper" function
to convert bstr to char*.

Fixes #1462.
This commit is contained in:
wm4 2015-01-12 14:33:56 +01:00
parent da2dbd74da
commit 8144d142e4
1 changed files with 3 additions and 3 deletions

View File

@ -32,15 +32,15 @@ void mp_tags_set_bstr(struct mp_tags *tags, bstr key, bstr value)
for (int n = 0; n < tags->num_keys; n++) { for (int n = 0; n < tags->num_keys; n++) {
if (bstrcasecmp0(key, tags->keys[n]) == 0) { if (bstrcasecmp0(key, tags->keys[n]) == 0) {
talloc_free(tags->values[n]); talloc_free(tags->values[n]);
tags->values[n] = talloc_strndup(tags, value.start, value.len); tags->values[n] = bstrto0(tags, value);
return; return;
} }
} }
MP_RESIZE_ARRAY(tags, tags->keys, tags->num_keys + 1); MP_RESIZE_ARRAY(tags, tags->keys, tags->num_keys + 1);
MP_RESIZE_ARRAY(tags, tags->values, tags->num_keys + 1); MP_RESIZE_ARRAY(tags, tags->values, tags->num_keys + 1);
tags->keys[tags->num_keys] = talloc_strndup(tags, key.start, key.len); tags->keys[tags->num_keys] = bstrto0(tags, key);
tags->values[tags->num_keys] = talloc_strndup(tags, value.start, value.len); tags->values[tags->num_keys] = bstrto0(tags, value);
tags->num_keys++; tags->num_keys++;
} }