diff --git a/dlls/urlmon/tests/misc.c b/dlls/urlmon/tests/misc.c index 1a7f078ad7b..24b703a9e49 100644 --- a/dlls/urlmon/tests/misc.c +++ b/dlls/urlmon/tests/misc.c @@ -331,6 +331,7 @@ static const WCHAR mimeTextPlain[] = {'t','e','x','t','/','p','l','a','i','n',0} static const WCHAR mimeAppOctetStream[] = {'a','p','p','l','i','c','a','t','i','o','n','/', 'o','c','t','e','t','-','s','t','r','e','a','m',0}; static const WCHAR mimeImagePjpeg[] = {'i','m','a','g','e','/','p','j','p','e','g',0}; +static const WCHAR mimeImageGif[] = {'i','m','a','g','e','/','g','i','f',0}; static const struct { LPCWSTR url; @@ -363,6 +364,16 @@ static BYTE data15[] = {0xff,0xd8}; static BYTE data16[] = {0xff,0xd8,'h'}; static BYTE data17[] = {0,0xff,0xd8}; static BYTE data18[] = {0xff,0xd8,'<','h','t','m','l','>'}; +static BYTE data19[] = {'G','I','F','8','7','a'}; +static BYTE data20[] = {'G','I','F','8','9','a'}; +static BYTE data21[] = {'G','I','F','8','7'}; +static BYTE data22[] = {'G','i','F','8','7','a'}; +static BYTE data23[] = {'G','i','F','8','8','a'}; +static BYTE data24[] = {'g','i','f','8','7','a'}; +static BYTE data25[] = {'G','i','F','8','7','A'}; +static BYTE data26[] = {'G','i','F','8','7','a','<','h','t','m','l','>'}; +static BYTE data27[] = {0x30,'G','i','F','8','7','A'}; + static const struct { BYTE *data; @@ -386,7 +397,16 @@ static const struct { {data15, sizeof(data15), mimeTextPlain}, {data16, sizeof(data16), mimeImagePjpeg}, {data17, sizeof(data17), mimeAppOctetStream}, - {data18, sizeof(data18), mimeTextHtml} + {data18, sizeof(data18), mimeTextHtml}, + {data19, sizeof(data19), mimeImageGif}, + {data20, sizeof(data20), mimeImageGif}, + {data21, sizeof(data21), mimeTextPlain}, + {data22, sizeof(data22), mimeImageGif}, + {data23, sizeof(data23), mimeTextPlain}, + {data24, sizeof(data24), mimeImageGif}, + {data25, sizeof(data25), mimeImageGif}, + {data26, sizeof(data26), mimeTextHtml}, + {data27, sizeof(data27), mimeTextPlain} }; static void test_FindMimeFromData(void) diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c index 2adafe981a8..742eb70efed 100644 --- a/dlls/urlmon/urlmon_main.c +++ b/dlls/urlmon/urlmon_main.c @@ -416,6 +416,19 @@ static BOOL text_html_filter(LPVOID buf, DWORD size) return FALSE; } +static BOOL image_gif_filter(LPVOID buf, DWORD size) +{ + const BYTE const *b = buf; + + return size >= 6 + && (b[0] == 'G' || b[0] == 'g') + && (b[1] == 'I' || b[1] == 'i') + && (b[2] == 'F' || b[2] == 'f') + && b[3] == '8' + && (b[4] == '7' || b[4] == '9') + && (b[5] == 'A' || b[5] == 'a'); +} + static BOOL image_pjpeg_filter(LPVOID buf, DWORD size) { return size > 2 && *(BYTE*)buf == 0xff && *((BYTE*)buf+1) == 0xd8; @@ -473,6 +486,7 @@ HRESULT WINAPI FindMimeFromData(LPBC pBC, LPCWSTR pwzUrl, LPVOID pBuffer, int i; static const WCHAR wszTextHtml[] = {'t','e','x','t','/','h','t','m','l',0}; + static const WCHAR wszImageGif[] = {'i','m','a','g','e','/','g','i','f',0}; static const WCHAR wszImagePjpeg[] = {'i','m','a','g','e','/','p','j','p','e','g',0}; static const WCHAR wszTextPlain[] = {'t','e','x','t','/','p','l','a','i','n','\0'}; static const WCHAR wszAppOctetStream[] = {'a','p','p','l','i','c','a','t','i','o','n','/', @@ -483,6 +497,7 @@ HRESULT WINAPI FindMimeFromData(LPBC pBC, LPCWSTR pwzUrl, LPVOID pBuffer, BOOL (*filter)(LPVOID,DWORD); } mime_filters[] = { {wszTextHtml, text_html_filter}, + {wszImageGif, image_gif_filter}, {wszImagePjpeg, image_pjpeg_filter}, {wszTextPlain, text_plain_filter}, {wszAppOctetStream, application_octet_stream_filter}