Merge pull request #2257 from Xaymar/fix-remove_by_name-corruption

libobs: Don't corrupt obs_properties in ..._remove_by_name
This commit is contained in:
Jim 2020-02-15 20:03:58 -08:00 committed by GitHub
commit d13f204488
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -331,9 +331,32 @@ void obs_properties_remove_by_name(obs_properties_t *props, const char *name)
while (cur) {
if (strcmp(cur->name, name) == 0) {
// Fix props->last pointer.
if (props->last == &cur->next) {
if (cur == prev) {
// If we are the last entry and there
// is no previous entry, reset.
props->last = &props->first_property;
} else {
// If we are the last entry and there
// is a previous entry, update.
props->last = &prev->next;
}
}
// Fix props->first_property.
if (props->first_property == cur)
props->first_property = cur->next;
// Update the previous element next pointer with our
// next pointer. This is an automatic no-op if both
// elements alias the same memory.
prev->next = cur->next;
cur->next = 0;
// Finally clear our own next pointer and destroy.
cur->next = NULL;
obs_property_destroy(cur);
break;
}