diff options
| author | Remi Collet <remi@php.net> | 2013-04-23 13:43:57 +0200 | 
|---|---|---|
| committer | Remi Collet <remi@php.net> | 2013-04-23 13:43:57 +0200 | 
| commit | eb50789910410179565e8f2114d80011e34c0ad7 (patch) | |
| tree | 7ffa4ac03fce9447019c3f8e8e568f7a9391e563 | |
| parent | 734e165d4e427feca9a736b62832a2ff287a22c9 (diff) | |
| download | php-git-eb50789910410179565e8f2114d80011e34c0ad7.tar.gz | |
(re)allow WBMP detection with system libgd
provide getbmi and skipheader not exported functions in gd_compat.
| -rw-r--r-- | ext/gd/gd.c | 5 | ||||
| -rw-r--r-- | ext/gd/libgd/gd_compat.c | 36 | ||||
| -rw-r--r-- | ext/gd/libgd/gd_compat.h | 3 | 
3 files changed, 40 insertions, 4 deletions
diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 6cafb51f20..203ae24216 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -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 @@ -2427,7 +2425,6 @@ static int _php_image_type (char data[8])  		}  	}  #endif -#endif  	return -1;  #endif  } diff --git a/ext/gd/libgd/gd_compat.c b/ext/gd/libgd/gd_compat.c index b56329029e..f3627a1404 100644 --- a/ext/gd/libgd/gd_compat.c +++ b/ext/gd/libgd/gd_compat.c @@ -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); +} + diff --git a/ext/gd/libgd/gd_compat.h b/ext/gd/libgd/gd_compat.h index 779e709a63..e8fedf80c5 100644 --- a/ext/gd/libgd/gd_compat.h +++ b/ext/gd/libgd/gd_compat.h @@ -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   *  | 
