While I won't oppose this patch since it has no performance impact, I believe this is a bug in the compiler and not in the code below. The compiler should know about setjmp(). glibc, for example, marks that function with __attribute__((returns_twice)).

Nuno

----- Original Message ----- From: "Rasmus Lerdorf" <ras...@php.net>
To: <php-cvs@lists.php.net>
Sent: Tuesday, November 06, 2012 4:57 AM


Commit:    f452b9056e89aa1bf18d6c0828ba709c0f8df854
Author: Rasmus Lerdorf <ras...@php.net> Mon, 5 Nov 2012 20:56:19 -0800
Parents:   153bfada90b0733943c31e9d7e2bee57c5e7bcac
Branches:  PHP-5.4

Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f452b9056e89aa1bf18d6c0828ba709c0f8df854

Log:
These need to be volatile in order to prevent leaking after the
longjmp in the error handler

Changed paths:
 M  ext/gd/libgd/gd_png.c


Diff:
diff --git a/ext/gd/libgd/gd_png.c b/ext/gd/libgd/gd_png.c
index 49f7cb0..bdbb7ee 100644
--- a/ext/gd/libgd/gd_png.c
+++ b/ext/gd/libgd/gd_png.c
@@ -127,8 +127,8 @@ gdImagePtr gdImageCreateFromPngCtx (gdIOCtx * infile)
 png_color_16p trans_gray_rgb;
 png_color_16p trans_color_rgb;
 png_bytep trans;
- png_bytep image_data = NULL;
- png_bytepp row_pointers = NULL;
+ volatile png_bytep image_data = NULL;
+ volatile png_bytepp row_pointers = NULL;
 gdImagePtr im = NULL;
 int i, j, *open = NULL;
 volatile int transparent = -1;


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to