]> granicus.if.org Git - php/commitdiff
Fix #70315: 500 Server Error but page is fully rendered
authorChristoph M. Becker <cmbecker69@gmx.de>
Thu, 7 Jul 2016 12:47:55 +0000 (14:47 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Mon, 18 Jul 2016 22:18:07 +0000 (00:18 +0200)
That happens because the external libgd uses other error codes than PHP
(and the bundled libgd), but the libgd error codes are simply forwarded
to php_verror(). We fix that by properly mapping libgd errors to PHP errors.

ext/gd/gd.c

index cb070abf84cd4f687d4cd55bd5014a4872e0b1c4..d8114649aeea7ece9a785e9fe61e354058f4e785 100644 (file)
@@ -69,6 +69,9 @@ static void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC);
 #endif
 
 #include <gd.h>
+#ifndef HAVE_GD_BUNDLED
+# include <gd_errors.h>
+#endif
 #include <gdfontt.h>  /* 1 Tiny font */
 #include <gdfonts.h>  /* 2 Small font */
 #include <gdfontmb.h> /* 3 Medium bold font */
@@ -1099,6 +1102,18 @@ void php_gd_error_method(int type, const char *format, va_list args)
 {
        TSRMLS_FETCH();
 
+       switch (type) {
+               case GD_DEBUG:
+               case GD_INFO:
+               case GD_NOTICE:
+                       type = E_NOTICE;
+                       break;
+               case GD_WARNING:
+                       type = E_WARNING;
+                       break;
+               default:
+                       type = E_ERROR;
+       }
        php_verror(NULL, "", type, format, args TSRMLS_CC);
 }
 /* }}} */