Fix method for creating activities string in PIDF bodies.
authorMark Michelson <mmichelson@digium.com>
Thu, 29 Aug 2013 22:54:05 +0000 (22:54 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 29 Aug 2013 22:54:05 +0000 (22:54 +0000)
The previous method did not allocate enough space to create
the entire string, but adjusted the string's slen value to
be larger than the actual allocation. This resulted in garbled
text in NOTIFY requests from Asterisk.

This method allocates the proper amount of space first and then
writes the content into the buffer.
........

Merged revisions 397960 from http://svn.asterisk.org/svn/asterisk/branches/12

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@397962 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_pjsip_pidf.c

index 1891e54..45dcb77 100644 (file)
@@ -159,8 +159,11 @@ static void add_non_standard(pj_pool_t *pool, pj_xml_node *node, const char *pid
 
        if (pidfstate[0] != '-') {
                pj_xml_node *activities = create_node(pool, status, "ep:activities");
-               pj_strdup2(pool, &activities->content, "ep:");
-               pj_strcat2(&activities->content, pidfstate);
+               size_t str_size = sizeof("ep:") + strlen(pidfstate);
+
+               activities->content.ptr = pj_pool_alloc(pool, str_size);
+               activities->content.slen = pj_ansi_snprintf(activities->content.ptr, str_size,
+                               "ep:%s", pidfstate);
        }
 
        create_attr(pool, node, XMLNS_PP, XMLNS_PERSON);