]> granicus.if.org Git - php/commitdiff
Fixed a bug that caused a crash in pdf_open_memory_image(), when a truecolor
authorIlia Alshanetsky <iliaa@php.net>
Tue, 3 Dec 2002 19:25:17 +0000 (19:25 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 3 Dec 2002 19:25:17 +0000 (19:25 +0000)
image was loaded, it now checks if the image is truecolor and performs the
appropriate calculations (fixed bug #20785).
Changed E_WARNING back to E_ERROR.

ext/pdf/pdf.c

index 682daea17fc9bedea4a1c6ba1aacd3cbe4d62eaa..73a6885699bc3544a74f909ae0c8acf7b299c583 100644 (file)
@@ -276,7 +276,7 @@ static void custom_errorhandler(PDF *p, int type, const char *shortmsg)
                case PDF_SystemError:
                case PDF_UnknownError:
                default:
-                       php_error(E_WARNING,"PDFlib error: %s", shortmsg);
+                       php_error(E_ERROR,"PDFlib error: %s", shortmsg);
                }
 }
 /* }}} */
@@ -1963,17 +1963,30 @@ PHP_FUNCTION(pdf_open_memory_image)
        ZEND_FETCH_RESOURCE(im, gdImagePtr, arg2, -1, "Image", le_gd);
 
        count = 3 * im->sx * im->sy;
-       if(NULL == (buffer = (unsigned char *) emalloc(count))) {
-               RETURN_FALSE;
-       }
+       buffer = (unsigned char *) emalloc(count);
 
        ptr = buffer;
        for(i=0; i<im->sy; i++) {
                for(j=0; j<im->sx; j++) {
-                       color = im->pixels[i][j];
-                       *ptr++ = im->red[color];
-                       *ptr++ = im->green[color];
-                       *ptr++ = im->blue[color];
+#if HAVE_LIBGD20
+                       if(gdImageTrueColor(im)) {
+                               if (im->tpixels && gdImageBoundsSafe(im, j, i)) {
+                                       color = gdImageTrueColorPixel(im, j, i);
+                                       *ptr++ = (color >> 16) & 0xFF;
+                                       *ptr++ = (color >> 8) & 0xFF;
+                                       *ptr++ = color & 0xFF;
+                               }
+                       } else {
+#endif
+                               if (im->pixels && gdImageBoundsSafe(im, j, i)) {
+                                       color = im->pixels[im->sy][im->sx];
+                                       *ptr++ = im->red[color];
+                                       *ptr++ = im->green[color];
+                                       *ptr++ = im->blue[color];
+                               }
+#if HAVE_LIBGD20
+                       }
+#endif         
                }
        }