mirror of https://github.com/mpv-player/mpv
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:
parent
da2dbd74da
commit
8144d142e4
|
@ -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++) {
|
||||
if (bstrcasecmp0(key, tags->keys[n]) == 0) {
|
||||
talloc_free(tags->values[n]);
|
||||
tags->values[n] = talloc_strndup(tags, value.start, value.len);
|
||||
tags->values[n] = bstrto0(tags, value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
MP_RESIZE_ARRAY(tags, tags->keys, 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->values[tags->num_keys] = talloc_strndup(tags, value.start, value.len);
|
||||
tags->keys[tags->num_keys] = bstrto0(tags, key);
|
||||
tags->values[tags->num_keys] = bstrto0(tags, value);
|
||||
tags->num_keys++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue