summaryrefslogtreecommitdiff
path: root/include/asterisk/stringfields.h
diff options
context:
space:
mode:
authorCorey Farrell <git@cfware.com>2014-11-19 19:32:23 +0000
committerCorey Farrell <git@cfware.com>2014-11-19 19:32:23 +0000
commit57c6f89bf082fafb64800ce49b4da74a9c2d8d9d (patch)
tree0e7afee99775e0889582fe0e1afec24bac81ac0f /include/asterisk/stringfields.h
parenta7c9f4c668c3b5d42f98d06ab0c20d81bd5fd25e (diff)
stringfields: Fix bug in ast_string_fields_copy.
ast_string_fields_copy relies on the fact that __ast_string_field_release_active never previously zeroed pool->used, so keeping the existing pointer was "ok". Now that existing pools can be reset to 'empty', it is important to set each field to __ast_string_field_empty after releasing the memory. ASTERISK-24535 #close Reported by: Corey Farrell Review: https://reviewboard.asterisk.org/r/4186/ ........ Merged revisions 428272 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 428273 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428274 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'include/asterisk/stringfields.h')
-rw-r--r--include/asterisk/stringfields.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/asterisk/stringfields.h b/include/asterisk/stringfields.h
index dc70960dc..d0879b2ba 100644
--- a/include/asterisk/stringfields.h
+++ b/include/asterisk/stringfields.h
@@ -438,10 +438,11 @@ void __ast_string_field_release_active(struct ast_string_field_pool *pool_head,
int __len__ = ((void *)&(copy)->__field_mgr - (void *)&(copy)->__field_mgr_pool)/__ptr_size__ - 1; \
int __len2__ = ((void *)&(orig)->__field_mgr - (void *)&(orig)->__field_mgr_pool)/__ptr_size__ - 1; \
if (__len__ == __len2__) { \
- char **__copy_head__ = (void *)&(copy)->__field_mgr_pool + __ptr_size__; \
- char **__orig_head__ = (void *)&(orig)->__field_mgr_pool + __ptr_size__; \
+ ast_string_field *__copy_head__ = (void *)&(copy)->__field_mgr_pool + __ptr_size__; \
+ ast_string_field *__orig_head__ = (void *)&(orig)->__field_mgr_pool + __ptr_size__; \
for (__len2__ -= 1; __len2__ >= 0; __len2__--) { \
__ast_string_field_release_active((copy)->__field_mgr_pool, __copy_head__[__len2__]); \
+ __copy_head__[__len2__] = __ast_string_field_empty; \
} \
for (__len__ -= 1; __len__ >= 0; __len__--) { \
if (ast_string_field_ptr_set((copy), &__copy_head__[__len__], __orig_head__[__len__])) { \