]> granicus.if.org Git - php/commitdiff
(re)allow WBMP detection with system libgd
authorRemi Collet <remi@php.net>
Tue, 23 Apr 2013 11:43:57 +0000 (13:43 +0200)
committerRemi Collet <remi@php.net>
Tue, 23 Apr 2013 11:43:57 +0000 (13:43 +0200)
provide getbmi and skipheader not exported functions in gd_compat.

ext/gd/gd.c
ext/gd/libgd/gd_compat.c
ext/gd/libgd/gd_compat.h

index 6cafb51f20f0c5df8f44268757f9dffbab7c625b..203ae242161e14ae60d301d37420621e08859872 100644 (file)
@@ -2403,14 +2403,12 @@ static int _php_image_type (char data[8])
        } else if (!memcmp(data, php_sig_gif, 3)) {
                return PHP_GDIMG_TYPE_GIF;
        }
-/* Temporary disabled, as gdGetC, getmbi and skipheader not exported in system libgd */
-#if HAVE_GD_BUNDLED
 #ifdef HAVE_GD_WBMP
        else {
                gdIOCtx *io_ctx;
                io_ctx = gdNewDynamicCtxEx(8, data, 0);
                if (io_ctx) {
-                       if (getmbi((int(*)(void *)) gdGetC, io_ctx) == 0 && skipheader((int(*)(void *)) gdGetC, io_ctx) == 0 ) {
+                       if (getmbi((int(*)(void *)) io_ctx->getC, io_ctx) == 0 && skipheader((int(*)(void *)) io_ctx->getC, io_ctx) == 0 ) {
 #if HAVE_LIBGD204
                                io_ctx->gd_free(io_ctx);
 #else
@@ -2426,7 +2424,6 @@ static int _php_image_type (char data[8])
                        }
                }
        }
-#endif
 #endif
        return -1;
 #endif
index b56329029e66360469a607dd3f52a8720acb872c..f3627a1404f2f14be1b3dd2e8bdc3255a9e3747d 100644 (file)
@@ -33,6 +33,7 @@ const char * gdPngGetVersionString()
 }
 #endif
 
+/* Not exported by libgd, copied from gdhelpers.h */
 int overflow2(int a, int b)
 {
        if(a <= 0 || b <= 0) {
@@ -44,3 +45,38 @@ int overflow2(int a, int b)
        return 0;
 }
 
+/* Not exported by libgd, copied from wbmp.c */
+int
+getmbi (int (*getin) (void *in), void *in)
+{
+  int i, mbi = 0;
+
+  do
+    {
+      i = getin (in);
+      if (i < 0)
+       return (-1);
+      mbi = (mbi << 7) | (i & 0x7f);
+    }
+  while (i & 0x80);
+
+  return (mbi);
+}
+
+/* Not exported by libgd, copied from wbmp.c */
+int
+skipheader (int (*getin) (void *in), void *in)
+{
+  int i;
+
+  do
+    {
+      i = getin (in);
+      if (i < 0)
+       return (-1);
+    }
+  while (i & 0x80);
+
+  return (0);
+}
+
index 779e709a638fcbd5ded1993cfb25b170200b50f3..e8fedf80c5062d2b3197bc0c7ccf137958499e99 100644 (file)
@@ -11,6 +11,9 @@ const char * gdPngGetVersionString();
 const char * gdJpegGetVersionString();
 int gdJpegGetVersionInt();
 int overflow2(int a, int b);
+int getmbi (int (*getin) (void *in), void *in);
+int skipheader (int (*getin) (void *in), void *in);
+
 
 /* filters section
  *