Peter Wu b683199688 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.
2015-11-08 18:30:44 +01:00
..
2015-09-14 13:30:08 -05:00
2015-06-23 14:43:16 -04:00
2014-05-14 19:37:57 +00:00
2015-09-14 13:30:08 -05:00
2015-06-12 23:55:29 -05:00
2015-09-14 13:30:08 -05:00
2015-09-15 22:35:29 -05:00
2015-06-12 23:55:29 -05:00
2014-04-28 15:16:03 -04:00
2015-09-09 21:39:41 +00:00