mirror of
https://github.com/php/php-src.git
synced 2026-04-11 01:53:36 +02:00
@ Add SWF support to getimagesize() function (Derick Rethans)
Add SWF support to getimagesize() function
This commit is contained in:
@@ -56,6 +56,8 @@ const char php_sig_png[8] =
|
||||
{(char) 0x89, (char) 0x50, (char) 0x4e,
|
||||
(char) 0x47, (char) 0x0d, (char) 0x0a,
|
||||
(char) 0x1a, (char) 0x0a};
|
||||
const char php_sig_swf[3] =
|
||||
{'F', 'W', 'S'};
|
||||
|
||||
/* return info as a struct, to make expansion easier */
|
||||
|
||||
@@ -92,6 +94,36 @@ static unsigned long php_read4(FILE *fp)
|
||||
|
||||
}
|
||||
|
||||
static unsigned long int php_swf_get_bits (unsigned char* buffer, int pos, int count)
|
||||
{
|
||||
unsigned int loop;
|
||||
unsigned long int result = 0;
|
||||
|
||||
for (loop = pos; loop < pos + count; loop++)
|
||||
{
|
||||
result = result +
|
||||
((((buffer[loop / 8]) >> (7 - (loop % 8))) & 0x01) << (count - (loop - pos) - 1));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static struct gfxinfo *php_handle_swf (FILE* fp)
|
||||
{
|
||||
struct gfxinfo *result = NULL;
|
||||
unsigned char bits;
|
||||
unsigned char a[32];
|
||||
|
||||
result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo));
|
||||
fseek(fp, 8, SEEK_SET);
|
||||
fread(a,sizeof(a),1,fp);
|
||||
bits = php_swf_get_bits (a, 0, 5);
|
||||
result->width = (php_swf_get_bits (a, 5 + bits, bits) -
|
||||
php_swf_get_bits (a, 5, bits)) / 20;
|
||||
result->height = (php_swf_get_bits (a, 5 + (3 * bits), bits) -
|
||||
php_swf_get_bits (a, 5 + (2 * bits), bits)) / 20;
|
||||
return result;
|
||||
}
|
||||
|
||||
/* routine to handle PNG files. - even easier */
|
||||
static struct gfxinfo *php_handle_png(FILE *fp)
|
||||
{
|
||||
@@ -365,6 +397,9 @@ PHP_FUNCTION(getimagesize)
|
||||
} else {
|
||||
php_error(E_WARNING, "PNG file corrupted by ASCII conversion");
|
||||
}
|
||||
} else if (!memcmp(filetype, php_sig_swf, 3)) {
|
||||
result = php_handle_swf(fp);
|
||||
itype = 4;
|
||||
}
|
||||
fclose(fp);
|
||||
if (result) {
|
||||
|
||||
Reference in New Issue
Block a user