uci: fix memory leak uci_set on update section
authorJan Venekamp <jan@venekamp.net>
Sun, 20 Nov 2022 01:08:26 +0000 (02:08 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 4 Mar 2023 18:39:32 +0000 (19:39 +0100)
commit16e8a3b1335a468c3aa6578db6ab2aa97b26fa45
tree6927de5d3683a36b6cc8f4ad189f761309ffe184
parentb2f341769d1dcd3e670d2462ec6a0de2bb756fee
uci: fix memory leak uci_set on update section

If uci_realloc fails when updating a section in uci_set the reference
to the memory allocated by s = uci_strdup() is lost.

Also, if uci_strdup and uci_realloc both succeed it could happen that
ptr->s->type == uci_dataptr(ptr->s) by accident. Then later on in
uci_free_section the allocated ptr->s->type is not freed.

In order to fix this, instead of splitting the allocation of the the
section and the type string, we create a new section with in-section
storage to replace the old one. This also brings the code for updating
a section more in line with the simular code for updating an option.

Signed-off-by: Jan Venekamp <jan@venekamp.net>
list.c