From f31b0a52aed33c0a14ec75fcfff414499989cdeb Mon Sep 17 00:00:00 2001 From: George Joseph Date: Tue, 17 Mar 2026 10:11:48 -0600 Subject: [PATCH] xmldoc.c: Fix memory leaks in handling of provided_by. Added a few calls to ast_xml_free_attr() to squash memory leaks when handling "provided_by". --- main/xmldoc.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/main/xmldoc.c b/main/xmldoc.c index 68cd3223ad..5982dea408 100644 --- a/main/xmldoc.c +++ b/main/xmldoc.c @@ -1829,14 +1829,16 @@ char *ast_xmldoc_build_since(const char *type, const char *name, const char *mod */ static char *_ast_xmldoc_build_provided_by(struct ast_xml_node *node) { - const char *output; + const char *attr; + char *output; - output = ast_xml_get_attribute(node, "module"); - if (ast_strlen_zero(output)) { + attr = ast_xml_get_attribute(node, "module"); + if (ast_strlen_zero(attr)) { return NULL; } - - return ast_strdup(output); + output = ast_strdup(attr); + ast_xml_free_attr(attr); + return output; } char *ast_xmldoc_build_provided_by(const char *type, const char *name, const char *module) @@ -2147,10 +2149,11 @@ static int xmldoc_parse_info(struct ast_xml_node *node, const char *tabs, const tech = ast_xml_get_attribute(node, "tech"); provided_by = ast_xml_get_attribute(node, "module"); - if (tech) { - ast_str_append(buffer, 0, "%sTechnology: %s Provided by: %s\n", internaltabs, tech, - S_OR(provided_by, "unknown")); + if (tech || provided_by) { + ast_str_append(buffer, 0, "%sTechnology: %s Provided by: %s\n", internaltabs, + S_OR(tech, "unknown"), S_OR(provided_by, "unknown")); ast_xml_free_attr(tech); + ast_xml_free_attr(provided_by); } ret = 1;