From c35a3bb4db6af4f7faa7bc23209f33f513c2a99a Mon Sep 17 00:00:00 2001 From: Andrey Volk Date: Fri, 23 Apr 2021 20:03:36 +0300 Subject: [PATCH] [Core] scan-build: fix false-positive memory leak in switch_xml_set_attr_d and switch_xml_set_attr_d_buf --- src/include/switch_core.h | 8 -------- src/include/switch_utils.h | 2 ++ src/switch_utils.c | 7 +++++++ src/switch_xml.c | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/include/switch_core.h b/src/include/switch_core.h index 9c9f6c490c..7592362c5c 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -243,14 +243,6 @@ static inline void *switch_must_realloc(void *_b, size_t _z) return m; } -static inline char *switch_must_strdup(const char *_s) -{ - char *s = strdup(_s); - switch_assert(s); - return s; -} - - /*! \defgroup core1 Core Library \ingroup FREESWITCH diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index 24c6151331..89983f3920 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -1487,6 +1487,8 @@ SWITCH_DECLARE(unsigned long) switch_getpid(void); SWITCH_DECLARE(switch_status_t) switch_digest(const char *digest_name, unsigned char **digest, const void *input, switch_size_t inputLen, unsigned int *outputlen); SWITCH_DECLARE(switch_status_t) switch_digest_string(const char *digest_name, char **digest_str, const void *input, switch_size_t inputLen, unsigned int *outputlen); +char *switch_must_strdup(const char *_s); + SWITCH_END_EXTERN_C #endif /* For Emacs: diff --git a/src/switch_utils.c b/src/switch_utils.c index 85e12f0488..9b02ecc870 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -4639,6 +4639,13 @@ SWITCH_DECLARE(switch_status_t) switch_digest_string(const char *digest_name, ch return status; } +char *switch_must_strdup(const char *_s) +{ + char *s = strdup(_s); + switch_assert(s); + return s; +} + /* For Emacs: * Local Variables: * mode:c diff --git a/src/switch_xml.c b/src/switch_xml.c index b70f6bfe74..a48f9ab96d 100644 --- a/src/switch_xml.c +++ b/src/switch_xml.c @@ -3040,7 +3040,7 @@ SWITCH_DECLARE(switch_xml_t) switch_xml_set_attr(switch_xml_t xml, const char *n SWITCH_DECLARE(switch_xml_t) switch_xml_set_attr_d(switch_xml_t xml, const char *name, const char *value) { if (!xml) return NULL; - return switch_xml_set_attr(switch_xml_set_flag(xml, SWITCH_XML_DUP), strdup(name), strdup(switch_str_nil(value))); + return switch_xml_set_attr(switch_xml_set_flag(xml, SWITCH_XML_DUP), switch_must_strdup(name), switch_must_strdup(switch_str_nil(value))); } /* Sets the given tag attribute or adds a new attribute if not found. A value @@ -3048,7 +3048,7 @@ SWITCH_DECLARE(switch_xml_t) switch_xml_set_attr_d(switch_xml_t xml, const char SWITCH_DECLARE(switch_xml_t) switch_xml_set_attr_d_buf(switch_xml_t xml, const char *name, const char *value) { if (!xml) return NULL; - return switch_xml_set_attr(switch_xml_set_flag(xml, SWITCH_XML_DUP), strdup(name), strdup(value)); + return switch_xml_set_attr(switch_xml_set_flag(xml, SWITCH_XML_DUP), switch_must_strdup(name), switch_must_strdup(value)); } /* sets a flag for the given tag and returns the tag */