Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv30684

Modified Files:
        ChangeLog astmm.c 
Log Message:
issue #5035


Index: ChangeLog
===================================================================
RCS file: /usr/cvsroot/asterisk/ChangeLog,v
retrieving revision 1.132
retrieving revision 1.133
diff -u -d -r1.132 -r1.133
--- ChangeLog   16 Nov 2005 00:56:10 -0000      1.132
+++ ChangeLog   16 Nov 2005 02:20:16 -0000      1.133
@@ -1,5 +1,7 @@
 2005-11-15  Kevin P. Fleming  <[EMAIL PROTECTED]>
 
+       * astmm.c (__ast_vasprintf): don't re-use the ap list without copying 
it; that's not safe on some platforms (issue #5035)
+
        * doc/README.backtrace: add note about properly building Asterisk to be 
able to produce backtraces; wrap text and remove DOS line endings
 
        * channels/chan_sip.c (add_codec_to_sdp): add 'annexb=no' to G.729A SDP 
(issue #5539)

Index: astmm.c
===================================================================
RCS file: /usr/cvsroot/asterisk/astmm.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- astmm.c     24 Oct 2005 20:12:04 -0000      1.23
+++ astmm.c     16 Nov 2005 02:20:16 -0000      1.24
@@ -254,21 +254,20 @@
 
 int __ast_vasprintf(char **strp, const char *fmt, va_list ap, const char 
*file, int lineno, const char *func) 
 {
-       int n, size = strlen(fmt) + 1;
-       if ((*strp = __ast_alloc_region(size, FUNC_VASPRINTF, file, lineno, 
func)) == NULL)
-               return -1; 
-       for (;;) {
-               n = vsnprintf(*strp, size, fmt, ap);
-               if (n > -1 && n < size)
-                       return n;
-               if (n > -1) {   /* glibc 2.1 */
-                       size = n+1;
-               } else {        /* glibc 2.0 */
-                       size *= 2;
-               }
-               if ((*strp = __ast_realloc(*strp, size, file, lineno, func)) == 
NULL)
-                       return -1;
-       }
+       int size;
+       va_list ap2;
+       char s;
+
+       *strp = NULL;
+       va_copy(ap2, ap);
+       size = vsnprintf(&s, 1, fmt, ap2);
+       va_end(ap2);
+       *strp = __ast_alloc_region(size + 1, FUNC_VASPRINTF, file, lineno, 
func);
+       if (!*strp)
+               return -1;
+       vsnprintf(*strp, size + 1, fmt, ap);
+
+       return size;
 }
 
 static int handle_show_memory(int fd, int argc, char *argv[])

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to