]> git.ipfire.org Git - thirdparty/freeswitch.git/commit
switch_xml_set_attr: fix inconsistent state on error paths
authorPeter Wu <peter@lekensteyn.nl>
Sun, 8 Nov 2015 15:26:46 +0000 (16:26 +0100)
committerPeter Wu <peter@lekensteyn.nl>
Sun, 8 Nov 2015 17:30:44 +0000 (18:30 +0100)
commitb6831996881a6646aa56170b62496facde4ae7bd
treeda156c914090db777e5dac333caee924895e8d70
parent91e86ab352b2cbe403486fc271b78e284a4906ae
switch_xml_set_attr: fix inconsistent state on error paths

Partially rewrite switch_xml_set_attr to fix memory leaks, uninitialized
argument values and use-after free warnings from Clang static analyzer.

Fixes these problems:

 - Add some comments and a new variable such that the code can more
   easily be audited / understood.
 - Always clear SWITCH_XML_DUP flag even if an error occurred to prevent
   free()'ing static strings on future invocations.
 - Keep the attribute list in a consistent state even if one of the
   memory allocation fails.
 - Keep allocation metadata in a consistent state when shrinking of the
   attribute lists fails. Previously the metadata was not updated,
   resulting in a wrong mapping from attributes to allocation flags.
 - Fix memory leaks when allocations fail.

Previous behavior: invalid memory accesses are possible after a memory
allocation failure, previous attributes may be lost.
New behavior: attributes list is always valid, a new attribute is either
set (or not), attributes can always be removed.
src/switch_xml.c