]> granicus.if.org Git - php/commitdiff
Fixed SIGSEGV during error processing on some systems (linux/ppc)
authorDmitry Stogov <dmitry@php.net>
Wed, 6 Jul 2005 06:58:44 +0000 (06:58 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 6 Jul 2005 06:58:44 +0000 (06:58 +0000)
ext/soap/soap.c

index a2f034eac6d4718e21be790af7d42cf390212d70..2efc6356c6dd717604eeeaafa1b8ccc3ef52e974 100644 (file)
@@ -1939,6 +1939,7 @@ static void soap_error_handler(int error_num, const char *error_filename, const
                int old = PG(display_errors);
                int fault = 0;
                zval fault_obj;
+               va_list argcopy;
 
                if (error_num == E_USER_ERROR || 
                    error_num == E_COMPILE_ERROR || 
@@ -1954,7 +1955,13 @@ static void soap_error_handler(int error_num, const char *error_filename, const
 
                        INIT_ZVAL(outbuflen);
 
+#ifdef va_copy
+                       va_copy(argcopy, args);
+                       buffer_len = vsnprintf(buffer, sizeof(buffer)-1, format, argcopy);
+                       va_end(argcopy);
+#else
                        buffer_len = vsnprintf(buffer, sizeof(buffer)-1, format, args);
+#endif
                        buffer[sizeof(buffer)-1]=0;
                        if (buffer_len > sizeof(buffer) - 1 || buffer_len < 0) {
                                buffer_len = sizeof(buffer) - 1;