[asterisk-commits] bebuild: tag 11.14.0-rc2 r427549 - in /tags/11.14.0-rc2: ./ include/asterisk/...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Nov 7 14:16:34 CST 2014


Author: bebuild
Date: Fri Nov  7 14:16:32 2014
New Revision: 427549

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=427549
Log:
Merge 427381 for rc2; update ChangeLog

Modified:
    tags/11.14.0-rc2/   (props changed)
    tags/11.14.0-rc2/ChangeLog
    tags/11.14.0-rc2/include/asterisk/stringfields.h
    tags/11.14.0-rc2/main/utils.c

Propchange: tags/11.14.0-rc2/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.

Propchange: tags/11.14.0-rc2/
------------------------------------------------------------------------------
    svn:mergeinfo = /branches/11:427381

Modified: tags/11.14.0-rc2/ChangeLog
URL: http://svnview.digium.com/svn/asterisk/tags/11.14.0-rc2/ChangeLog?view=diff&rev=427549&r1=427548&r2=427549
==============================================================================
--- tags/11.14.0-rc2/ChangeLog (original)
+++ tags/11.14.0-rc2/ChangeLog Fri Nov  7 14:16:32 2014
@@ -1,3 +1,21 @@
+2014-11-07  Asterisk Development Team <asteriskteam at digium.com>
+
+	* Asterisk 11.14.0-rc2 Released.
+
+2014-11-06 09:05 +0000 [r427381]  Corey Farrell <git at cfware.com>
+
+	* Fix unintential memory retention in stringfields.
+
+	  * Fix missing / unreachable calls to
+	    __ast_string_field_release_active.
+	  * Reset pool->used to zero when the current pool->active reaches
+	    zero.
+
+	ASTERISK-24307 #close
+	Reported by: Etienne Lessard
+	Tested by: ibercom, Etienne Lessard
+	Review: https://reviewboard.asterisk.org/r/4114/
+
 2014-11-03  Asterisk Development Team <asteriskteam at digium.com>
 
 	* Asterisk 11.14.0-rc1 Released.

Modified: tags/11.14.0-rc2/include/asterisk/stringfields.h
URL: http://svnview.digium.com/svn/asterisk/tags/11.14.0-rc2/include/asterisk/stringfields.h?view=diff&rev=427549&r1=427548&r2=427549
==============================================================================
--- tags/11.14.0-rc2/include/asterisk/stringfields.h (original)
+++ tags/11.14.0-rc2/include/asterisk/stringfields.h Fri Nov  7 14:16:32 2014
@@ -315,21 +315,23 @@
 */
 #define ast_string_field_ptr_set(x, ptr, data) ast_string_field_ptr_set_by_fields((x)->__field_mgr_pool, (x)->__field_mgr, ptr, data)
 
-#define ast_string_field_ptr_set_by_fields(field_mgr_pool, field_mgr, ptr, data) do {                                   \
-    const char *__d__ = (data);                                         \
-    size_t __dlen__ = (__d__) ? strlen(__d__) + 1 : 1;                              \
-    ast_string_field *__p__ = (ast_string_field *) (ptr);                               \
-    if (__dlen__ == 1) {                                                \
-        __ast_string_field_release_active(field_mgr_pool, *__p__);                  \
-        *__p__ = __ast_string_field_empty;                                  \
-    } else if ((__dlen__ <= AST_STRING_FIELD_ALLOCATION(*__p__)) ||                         \
-           (!__ast_string_field_ptr_grow(&field_mgr, &field_mgr_pool, __dlen__, __p__)) ||   \
-           (*__p__ = __ast_string_field_alloc_space(&field_mgr, &field_mgr_pool, __dlen__))) {   \
-        if (*__p__ != (*ptr)) {                                         \
-            __ast_string_field_release_active(field_mgr_pool, (*ptr));              \
-        }                                                   \
-        memcpy(* (void **) __p__, __d__, __dlen__);                             \
-    }                                                       \
+#define ast_string_field_ptr_set_by_fields(field_mgr_pool, field_mgr, ptr, data) do {            \
+    const char *__d__ = (data);                                                                  \
+    size_t __dlen__ = (__d__) ? strlen(__d__) + 1 : 1;                                           \
+    ast_string_field *__p__ = (ast_string_field *) (ptr);                                        \
+    ast_string_field target = *__p__;                                                            \
+    if (__dlen__ == 1) {                                                                         \
+        __ast_string_field_release_active(field_mgr_pool, *__p__);                               \
+        *__p__ = __ast_string_field_empty;                                                       \
+    } else if ((__dlen__ <= AST_STRING_FIELD_ALLOCATION(*__p__)) ||                              \
+           (!__ast_string_field_ptr_grow(&field_mgr, &field_mgr_pool, __dlen__, __p__)) ||       \
+           (target = __ast_string_field_alloc_space(&field_mgr, &field_mgr_pool, __dlen__))) {   \
+        if (target != (*__p__)) {                                                                \
+            __ast_string_field_release_active(field_mgr_pool, *__p__);                           \
+            *__p__ = target;                                                                     \
+        }                                                                                        \
+        memcpy(* (void **) __p__, __d__, __dlen__);                                              \
+    }                                                                                            \
     } while (0)
 
 /*!

Modified: tags/11.14.0-rc2/main/utils.c
URL: http://svnview.digium.com/svn/asterisk/tags/11.14.0-rc2/main/utils.c?view=diff&rev=427549&r1=427548&r2=427549
==============================================================================
--- tags/11.14.0-rc2/main/utils.c (original)
+++ tags/11.14.0-rc2/main/utils.c Fri Nov  7 14:16:32 2014
@@ -1967,9 +1967,13 @@
 	for (pool = pool_head, prev = NULL; pool; prev = pool, pool = pool->prev) {
 		if ((ptr >= pool->base) && (ptr <= (pool->base + pool->size))) {
 			pool->active -= AST_STRING_FIELD_ALLOCATION(ptr);
-			if ((pool->active == 0) && prev) {
-				prev->prev = pool->prev;
-				ast_free(pool);
+			if (pool->active == 0) {
+				if (prev) {
+					prev->prev = pool->prev;
+					ast_free(pool);
+				} else {
+					pool->used = 0;
+				}
 			}
 			break;
 		}
@@ -2016,6 +2020,11 @@
 
 	if (res < 0) {
 		/* Are we out of memory? */
+		return;
+	}
+	if (res == 0) {
+		__ast_string_field_release_active(*pool_head, *ptr);
+		*ptr = __ast_string_field_empty;
 		return;
 	}
 	needed = (size_t)res + 1; /* NUL byte */




More information about the asterisk-commits mailing list