]> granicus.if.org Git - php/commitdiff
port fix for #30998: Crash when user error handler returns false on amd64
authorStanislav Malyshev <stas@php.net>
Mon, 6 Dec 2004 15:50:27 +0000 (15:50 +0000)
committerStanislav Malyshev <stas@php.net>
Mon, 6 Dec 2004 15:50:27 +0000 (15:50 +0000)
Zend/zend.c

index 97dfcd3a913c6d128170be201ce11124c4922b8b..7737280c0a1eba8a3f7a6ebefbc6207ed8e03755 100644 (file)
@@ -874,6 +874,7 @@ ZEND_API int zend_get_configuration_directive(char *name, uint name_length, zval
 ZEND_API void zend_error(int type, const char *format, ...)
 {
        va_list args;
+       va_list usr_copy;
        zval ***params;
        zval *retval;
        zval *z_error_type, *z_error_message, *z_error_filename, *z_error_lineno, *z_context;
@@ -943,7 +944,15 @@ ZEND_API void zend_error(int type, const char *format, ...)
                        ALLOC_INIT_ZVAL(z_error_lineno);
                        ALLOC_INIT_ZVAL(z_context);
 
-                       z_error_message->value.str.len = zend_vspprintf(&z_error_message->value.str.val, 0, format, args);
+#if defined(va_copy)
+                       va_copy(usr_copy, args);
+#else
+                       usr_copy = args;
+#endif
+                       z_error_message->value.str.len = zend_vspprintf(&z_error_message->value.str.val, 0, format, usr_copy);
+#if defined(va_copy)
+                       va_end(usr_copy);
+#endif
                        z_error_message->type = IS_STRING;
 
                        z_error_type->value.lval = type;