From c2e5749443bfee57ff1cd81af4dfbfb9e7c5480e Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 2 Jul 2023 17:30:50 +0100 Subject: [PATCH] Fix crash when reading truncated GIF image Add a unit test case checking that we don't crash any longer and still read the image meta data correctly, even if not the image itself. Also add another check for EOF and possibly invalid "bits" value in another place where we were not checking for it when reading from the stream. Closes #23409. Co-authored-by: PB --- src/common/gifdecod.cpp | 5 ++- tests/Makefile.in | 2 +- tests/image/bad_truncated.gif | Bin 0 -> 33048 bytes tests/image/image.cpp | 8 ++++ tests/makefile.gcc | 28 ++++++------- tests/makefile.vc | 72 +++++++++++++++++----------------- tests/test.bkl | 2 + 7 files changed, 64 insertions(+), 53 deletions(-) create mode 100644 tests/image/bad_truncated.gif diff --git a/src/common/gifdecod.cpp b/src/common/gifdecod.cpp index 74d9adfbec..1668bc295b 100644 --- a/src/common/gifdecod.cpp +++ b/src/common/gifdecod.cpp @@ -305,8 +305,9 @@ int wxGIFDecoder::getcode(wxInputStream& stream, int bits, int ab_fin) * an end-of-image symbol (ab_fin) they come up with * a zero-length subblock!! We catch this here so * that the decoder sees an ab_fin code. + * We also need to check if the file doesn't end unexpectedly. */ - if (m_restbyte == 0) + if (stream.Eof() || m_restbyte == 0) { code = ab_fin; break; @@ -860,7 +861,7 @@ wxGIFErrorCode wxGIFDecoder::LoadGIF(wxInputStream& stream) // get initial code size from first byte in raster data bits = stream.GetC(); - if (bits == 0) + if (stream.Eof() || bits <= 0) return wxGIF_INVFORMAT; // decode image diff --git a/tests/Makefile.in b/tests/Makefile.in index 1adca31cda..e6c858fdae 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -582,7 +582,7 @@ data-image-sample: data-images: @mkdir -p image - @for f in bitfields.bmp bitfields-alpha.bmp 8bpp-colorsused-large.bmp 8bpp-colorsused-negative.bmp rle4-delta-320x240.bmp rle8-delta-320x240.bmp rle8-delta-320x240-expected.bmp horse_grey.bmp horse_grey_flipped.bmp horse_rle4.bmp horse_rle4_flipped.bmp horse_rle8.bmp horse_rle8_flipped.bmp horse_bicubic_50x50.png horse_bicubic_100x100.png horse_bicubic_150x150.png horse_bicubic_300x300.png horse_bilinear_50x50.png horse_bilinear_100x100.png horse_bilinear_150x150.png horse_bilinear_300x300.png horse_box_average_50x50.png horse_box_average_100x100.png horse_box_average_150x150.png horse_box_average_300x300.png cross_bicubic_256x256.png cross_bilinear_256x256.png cross_box_average_256x256.png cross_nearest_neighb_256x256.png paste_input_background.png paste_input_black.png paste_input_overlay_transparent_border_opaque_square.png paste_input_overlay_transparent_border_semitransparent_circle.png paste_input_overlay_transparent_border_semitransparent_square.png paste_result_background_plus_circle_plus_square.png paste_result_background_plus_overlay_transparent_border_opaque_square.png paste_result_background_plus_overlay_transparent_border_semitransparent_square.png paste_result_no_background_square_over_circle.png wx.png toucan.png toucan_hue_0.538.png toucan_sat_-0.41.png toucan_bright_-0.259.png toucan_hsv_0.538_-0.41_-0.259.png toucan_light_46.png toucan_dis_240.png toucan_grey.png toucan_mono_255_255_255.png width-times-height-overflow.bmp width_height_32_bit_overflow.pgm; do \ + @for f in bitfields.bmp bitfields-alpha.bmp 8bpp-colorsused-large.bmp 8bpp-colorsused-negative.bmp rle4-delta-320x240.bmp rle8-delta-320x240.bmp rle8-delta-320x240-expected.bmp horse_grey.bmp horse_grey_flipped.bmp horse_rle4.bmp horse_rle4_flipped.bmp horse_rle8.bmp horse_rle8_flipped.bmp horse_bicubic_50x50.png horse_bicubic_100x100.png horse_bicubic_150x150.png horse_bicubic_300x300.png horse_bilinear_50x50.png horse_bilinear_100x100.png horse_bilinear_150x150.png horse_bilinear_300x300.png horse_box_average_50x50.png horse_box_average_100x100.png horse_box_average_150x150.png horse_box_average_300x300.png cross_bicubic_256x256.png cross_bilinear_256x256.png cross_box_average_256x256.png cross_nearest_neighb_256x256.png paste_input_background.png paste_input_black.png paste_input_overlay_transparent_border_opaque_square.png paste_input_overlay_transparent_border_semitransparent_circle.png paste_input_overlay_transparent_border_semitransparent_square.png paste_result_background_plus_circle_plus_square.png paste_result_background_plus_overlay_transparent_border_opaque_square.png paste_result_background_plus_overlay_transparent_border_semitransparent_square.png paste_result_no_background_square_over_circle.png wx.png toucan.png toucan_hue_0.538.png toucan_sat_-0.41.png toucan_bright_-0.259.png toucan_hsv_0.538_-0.41_-0.259.png toucan_light_46.png toucan_dis_240.png toucan_grey.png toucan_mono_255_255_255.png width-times-height-overflow.bmp width_height_32_bit_overflow.pgm bad_truncated.gif; do \ if test ! -f image/$$f -a ! -d image/$$f ; \ then x=yep ; \ else x=`find $(srcdir)/image/$$f -newer image/$$f -print` ; \ diff --git a/tests/image/bad_truncated.gif b/tests/image/bad_truncated.gif new file mode 100644 index 0000000000000000000000000000000000000000..3568c77dcd60643b6bd0431d65e2c682f45b3075 GIT binary patch literal 33048 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 BC;9*Y literal 0 HcmV?d00001 diff --git a/tests/image/image.cpp b/tests/image/image.cpp index d524e66e8d..d84692fd34 100644 --- a/tests/image/image.cpp +++ b/tests/image/image.cpp @@ -1257,6 +1257,14 @@ TEST_CASE_METHOD(ImageHandlersInit, "wxImage::GIFComment", "[image]") #endif //wxUSE_PALETTE } +TEST_CASE_METHOD(ImageHandlersInit, "wxImage::BadGIF", "[image][gif][error]") +{ + wxImage image("image/bad_truncated.gif"); + REQUIRE( image.IsOk() ); + + CHECK( image.GetSize() == wxSize(1200, 800) ); +} + #endif // wxUSE_GIF TEST_CASE_METHOD(ImageHandlersInit, "wxImage::DibPadding", "[image]") diff --git a/tests/makefile.gcc b/tests/makefile.gcc index 138bf16b3b..37665d2386 100644 --- a/tests/makefile.gcc +++ b/tests/makefile.gcc @@ -294,10 +294,10 @@ ifeq ($(SHARED),1) LIBTYPE_SUFFIX = dll endif ifeq ($(MONOLITHIC),0) -EXTRALIBS_FOR_BASE = +EXTRALIBS_FOR_BASE = endif ifeq ($(MONOLITHIC),1) -EXTRALIBS_FOR_BASE = +EXTRALIBS_FOR_BASE = endif ifeq ($(MONOLITHIC),1) __LIB_PNG_IF_MONO_p = $(__LIB_PNG_p) @@ -356,13 +356,13 @@ ifeq ($(USE_RTTI),0) __RTTIFLAG = -fno-rtti endif ifeq ($(USE_RTTI),1) -__RTTIFLAG = +__RTTIFLAG = endif ifeq ($(USE_EXCEPTIONS),0) __EXCEPTIONSFLAG = -fno-exceptions endif ifeq ($(USE_EXCEPTIONS),1) -__EXCEPTIONSFLAG = +__EXCEPTIONSFLAG = endif ifeq ($(WXUNIV),1) __WXUNIV_DEFINE_p = -D__WXUNIVERSAL__ @@ -471,17 +471,17 @@ endif endif ifeq ($(BUILD),release) ifeq ($(DEBUG_INFO),default) -__DEBUGINFO = +__DEBUGINFO = endif endif ifeq ($(DEBUG_INFO),0) -__DEBUGINFO = +__DEBUGINFO = endif ifeq ($(DEBUG_INFO),1) __DEBUGINFO = -g endif ifeq ($(USE_THREADS),0) -__THREADSFLAG = +__THREADSFLAG = endif ifeq ($(USE_THREADS),1) __THREADSFLAG = -mthreads @@ -496,7 +496,7 @@ $(OBJS): all: $(OBJS)\test.exe $(__test_drawing___depname) $(__test_drawingplugin___depname) $(__test_gui___depname) $(__test_allheaders___depname) data data-image-sample data-images fr ja -clean: +clean: -if exist $(OBJS)\*.o del $(OBJS)\*.o -if exist $(OBJS)\*.d del $(OBJS)\*.d -if exist $(OBJS)\test.exe del $(OBJS)\test.exe @@ -542,23 +542,23 @@ $(OBJS)\test_allheaders.exe: $(TEST_ALLHEADERS_OBJECTS) $(OBJS)\test_allheaders_ @-del $@.rsp endif -data: +data: if not exist $(OBJS) mkdir $(OBJS) for %%f in (testdata.conf horse.svg) do if not exist $(OBJS)\%%f copy .\%%f $(OBJS) -data-image-sample: +data-image-sample: if not exist $(OBJS) mkdir $(OBJS) for %%f in (horse.ani horse.bmp horse.cur horse.gif horse.ico horse.jpg horse.pcx horse.png horse.pnm horse.tga horse.tif horse.xpm) do if not exist $(OBJS)\%%f copy .\%%f $(OBJS) -data-images: +data-images: if not exist image mkdir image - for %%f in (bitfields.bmp bitfields-alpha.bmp 8bpp-colorsused-large.bmp 8bpp-colorsused-negative.bmp rle4-delta-320x240.bmp rle8-delta-320x240.bmp rle8-delta-320x240-expected.bmp horse_grey.bmp horse_grey_flipped.bmp horse_rle4.bmp horse_rle4_flipped.bmp horse_rle8.bmp horse_rle8_flipped.bmp horse_bicubic_50x50.png horse_bicubic_100x100.png horse_bicubic_150x150.png horse_bicubic_300x300.png horse_bilinear_50x50.png horse_bilinear_100x100.png horse_bilinear_150x150.png horse_bilinear_300x300.png horse_box_average_50x50.png horse_box_average_100x100.png horse_box_average_150x150.png horse_box_average_300x300.png cross_bicubic_256x256.png cross_bilinear_256x256.png cross_box_average_256x256.png cross_nearest_neighb_256x256.png paste_input_background.png paste_input_black.png paste_input_overlay_transparent_border_opaque_square.png paste_input_overlay_transparent_border_semitransparent_circle.png paste_input_overlay_transparent_border_semitransparent_square.png paste_result_background_plus_circle_plus_square.png paste_result_background_plus_overlay_transparent_border_opaque_square.png paste_result_background_plus_overlay_transparent_border_semitransparent_square.png paste_result_no_background_square_over_circle.png wx.png toucan.png toucan_hue_0.538.png toucan_sat_-0.41.png toucan_bright_-0.259.png toucan_hsv_0.538_-0.41_-0.259.png toucan_light_46.png toucan_dis_240.png toucan_grey.png toucan_mono_255_255_255.png width-times-height-overflow.bmp width_height_32_bit_overflow.pgm) do if not exist image\%%f copy .\image\%%f image + for %%f in (bitfields.bmp bitfields-alpha.bmp 8bpp-colorsused-large.bmp 8bpp-colorsused-negative.bmp rle4-delta-320x240.bmp rle8-delta-320x240.bmp rle8-delta-320x240-expected.bmp horse_grey.bmp horse_grey_flipped.bmp horse_rle4.bmp horse_rle4_flipped.bmp horse_rle8.bmp horse_rle8_flipped.bmp horse_bicubic_50x50.png horse_bicubic_100x100.png horse_bicubic_150x150.png horse_bicubic_300x300.png horse_bilinear_50x50.png horse_bilinear_100x100.png horse_bilinear_150x150.png horse_bilinear_300x300.png horse_box_average_50x50.png horse_box_average_100x100.png horse_box_average_150x150.png horse_box_average_300x300.png cross_bicubic_256x256.png cross_bilinear_256x256.png cross_box_average_256x256.png cross_nearest_neighb_256x256.png paste_input_background.png paste_input_black.png paste_input_overlay_transparent_border_opaque_square.png paste_input_overlay_transparent_border_semitransparent_circle.png paste_input_overlay_transparent_border_semitransparent_square.png paste_result_background_plus_circle_plus_square.png paste_result_background_plus_overlay_transparent_border_opaque_square.png paste_result_background_plus_overlay_transparent_border_semitransparent_square.png paste_result_no_background_square_over_circle.png wx.png toucan.png toucan_hue_0.538.png toucan_sat_-0.41.png toucan_bright_-0.259.png toucan_hsv_0.538_-0.41_-0.259.png toucan_light_46.png toucan_dis_240.png toucan_grey.png toucan_mono_255_255_255.png width-times-height-overflow.bmp width_height_32_bit_overflow.pgm bad_truncated.gif) do if not exist image\%%f copy .\image\%%f image -fr: +fr: if not exist $(OBJS)\intl\fr mkdir $(OBJS)\intl\fr for %%f in (internat.po internat.mo) do if not exist $(OBJS)\intl\fr\%%f copy .\intl\fr\%%f $(OBJS)\intl\fr -ja: +ja: if not exist $(OBJS)\intl\ja mkdir $(OBJS)\intl\ja for %%f in (internat.po internat.mo) do if not exist $(OBJS)\intl\ja\%%f copy .\intl\ja\%%f $(OBJS)\intl\ja diff --git a/tests/makefile.vc b/tests/makefile.vc index 3d76c9ebbb..54dc4cbb3d 100644 --- a/tests/makefile.vc +++ b/tests/makefile.vc @@ -409,19 +409,19 @@ WIN32_DPI_LINKFLAG = /MANIFEST:EMBED \ /MANIFESTINPUT:./../include/wx/msw/wx_dpi_aware_pmv2.manifest !endif !if "$(MONOLITHIC)" == "0" -EXTRALIBS_FOR_BASE = +EXTRALIBS_FOR_BASE = !endif !if "$(MONOLITHIC)" == "1" -EXTRALIBS_FOR_BASE = +EXTRALIBS_FOR_BASE = !endif !if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default" __DEBUGINFO_2 = $(__DEBUGRUNTIME_3) !endif !if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default" -__DEBUGINFO_2 = +__DEBUGINFO_2 = !endif !if "$(DEBUG_INFO)" == "0" -__DEBUGINFO_2 = +__DEBUGINFO_2 = !endif !if "$(DEBUG_INFO)" == "1" __DEBUGINFO_2 = $(__DEBUGRUNTIME_3) @@ -442,10 +442,10 @@ __test_drawing___depname = $(OBJS)\test_drawing.exe __DEBUGINFO_19 = $(__DEBUGRUNTIME_3) !endif !if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default" -__DEBUGINFO_19 = +__DEBUGINFO_19 = !endif !if "$(DEBUG_INFO)" == "0" -__DEBUGINFO_19 = +__DEBUGINFO_19 = !endif !if "$(DEBUG_INFO)" == "1" __DEBUGINFO_19 = $(__DEBUGRUNTIME_3) @@ -463,10 +463,10 @@ __test_drawingplugin___depname = $(OBJS)\test_drawingplugin.dll __DEBUGINFO_37 = $(__DEBUGRUNTIME_3) !endif !if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default" -__DEBUGINFO_37 = +__DEBUGINFO_37 = !endif !if "$(DEBUG_INFO)" == "0" -__DEBUGINFO_37 = +__DEBUGINFO_37 = !endif !if "$(DEBUG_INFO)" == "1" __DEBUGINFO_37 = $(__DEBUGRUNTIME_3) @@ -484,10 +484,10 @@ __test_gui___depname = $(OBJS)\test_gui.exe __DEBUGINFO_51 = $(__DEBUGRUNTIME_3) !endif !if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default" -__DEBUGINFO_51 = +__DEBUGINFO_51 = !endif !if "$(DEBUG_INFO)" == "0" -__DEBUGINFO_51 = +__DEBUGINFO_51 = !endif !if "$(DEBUG_INFO)" == "1" __DEBUGINFO_51 = $(__DEBUGRUNTIME_3) @@ -529,10 +529,10 @@ __test_allheaders___depname = $(OBJS)\test_allheaders.exe __DEBUGINFO_68 = $(__DEBUGRUNTIME_3) !endif !if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default" -__DEBUGINFO_68 = +__DEBUGINFO_68 = !endif !if "$(DEBUG_INFO)" == "0" -__DEBUGINFO_68 = +__DEBUGINFO_68 = !endif !if "$(DEBUG_INFO)" == "1" __DEBUGINFO_68 = $(__DEBUGRUNTIME_3) @@ -551,10 +551,10 @@ __WXLIB_XML_p = \ __DEBUGINFO = /Zi !endif !if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default" -__DEBUGINFO = +__DEBUGINFO = !endif !if "$(DEBUG_INFO)" == "0" -__DEBUGINFO = +__DEBUGINFO = !endif !if "$(DEBUG_INFO)" == "1" __DEBUGINFO = /Zi @@ -563,10 +563,10 @@ __DEBUGINFO = /Zi __DEBUGINFO_5 = /DEBUG !endif !if "$(BUILD)" == "release" && "$(DEBUG_INFO)" == "default" -__DEBUGINFO_5 = +__DEBUGINFO_5 = !endif !if "$(DEBUG_INFO)" == "0" -__DEBUGINFO_5 = +__DEBUGINFO_5 = !endif !if "$(DEBUG_INFO)" == "1" __DEBUGINFO_5 = /DEBUG @@ -575,10 +575,10 @@ __DEBUGINFO_5 = /DEBUG ____DEBUGRUNTIME = /D_DEBUG !endif !if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default" -____DEBUGRUNTIME = +____DEBUGRUNTIME = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "0" -____DEBUGRUNTIME = +____DEBUGRUNTIME = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "1" ____DEBUGRUNTIME = /D_DEBUG @@ -587,10 +587,10 @@ ____DEBUGRUNTIME = /D_DEBUG ____DEBUGRUNTIME_0 = /d _DEBUG !endif !if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default" -____DEBUGRUNTIME_0 = +____DEBUGRUNTIME_0 = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "0" -____DEBUGRUNTIME_0 = +____DEBUGRUNTIME_0 = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "1" ____DEBUGRUNTIME_0 = /d _DEBUG @@ -599,16 +599,16 @@ ____DEBUGRUNTIME_0 = /d _DEBUG __DEBUGRUNTIME = d !endif !if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default" -__DEBUGRUNTIME = +__DEBUGRUNTIME = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "0" -__DEBUGRUNTIME = +__DEBUGRUNTIME = !endif !if "$(DEBUG_RUNTIME_LIBS)" == "1" __DEBUGRUNTIME = d !endif !if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default" -__DEBUGRUNTIME_3 = +__DEBUGRUNTIME_3 = !endif !if "$(BUILD)" == "release" && "$(DEBUG_RUNTIME_LIBS)" == "default" __DEBUGRUNTIME_3 = /opt:ref /opt:icf @@ -617,7 +617,7 @@ __DEBUGRUNTIME_3 = /opt:ref /opt:icf __DEBUGRUNTIME_3 = /opt:ref /opt:icf !endif !if "$(DEBUG_RUNTIME_LIBS)" == "1" -__DEBUGRUNTIME_3 = +__DEBUGRUNTIME_3 = !endif !if "$(BUILD)" == "debug" __OPTIMIZEFLAG = /Od @@ -638,7 +638,7 @@ __RTTIFLAG = /GR- __RTTIFLAG = /GR !endif !if "$(USE_EXCEPTIONS)" == "0" -__EXCEPTIONSFLAG = +__EXCEPTIONSFLAG = !endif !if "$(USE_EXCEPTIONS)" == "1" __EXCEPTIONSFLAG = /EHsc @@ -659,19 +659,19 @@ __NO_VC_CRTDBG_p_0 = /d __NO_VC_CRTDBG__ __TARGET_CPU_COMPFLAG_p = /DTARGET_CPU_COMPFLAG=0 !endif !if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "X64" -__TARGET_CPU_COMPFLAG_p = +__TARGET_CPU_COMPFLAG_p = !endif !if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "x64" -__TARGET_CPU_COMPFLAG_p = +__TARGET_CPU_COMPFLAG_p = !endif !if "$(TARGET_CPU)" == "" __TARGET_CPU_COMPFLAG_p_0 = /d TARGET_CPU_COMPFLAG=0 !endif !if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "X64" -__TARGET_CPU_COMPFLAG_p_0 = +__TARGET_CPU_COMPFLAG_p_0 = !endif !if "$(TARGET_CPU)" == "" && "$(VISUALSTUDIOPLATFORM)" == "x64" -__TARGET_CPU_COMPFLAG_p_0 = +__TARGET_CPU_COMPFLAG_p_0 = !endif !if "$(WXUNIV)" == "1" __WXUNIV_DEFINE_p = /D__WXUNIVERSAL__ @@ -782,7 +782,7 @@ $(OBJS): all: $(OBJS)\test.exe $(__test_drawing___depname) $(__test_drawingplugin___depname) $(__test_gui___depname) $(__test_allheaders___depname) data data-image-sample data-images fr ja -clean: +clean: -if exist $(OBJS)\*.obj del $(OBJS)\*.obj -if exist $(OBJS)\*.res del $(OBJS)\*.res -if exist $(OBJS)\*.pch del $(OBJS)\*.pch @@ -835,23 +835,23 @@ $(OBJS)\test_allheaders.exe: $(OBJS)\test_allheaders_dummy.obj $(TEST_ALLHEADER << !endif -data: +data: if not exist $(OBJS) mkdir $(OBJS) for %f in (testdata.conf horse.svg) do if not exist $(OBJS)\%f copy .\%f $(OBJS) -data-image-sample: +data-image-sample: if not exist $(OBJS) mkdir $(OBJS) for %f in (horse.ani horse.bmp horse.cur horse.gif horse.ico horse.jpg horse.pcx horse.png horse.pnm horse.tga horse.tif horse.xpm) do if not exist $(OBJS)\%f copy .\%f $(OBJS) -data-images: +data-images: if not exist image mkdir image - for %f in (bitfields.bmp bitfields-alpha.bmp 8bpp-colorsused-large.bmp 8bpp-colorsused-negative.bmp rle4-delta-320x240.bmp rle8-delta-320x240.bmp rle8-delta-320x240-expected.bmp horse_grey.bmp horse_grey_flipped.bmp horse_rle4.bmp horse_rle4_flipped.bmp horse_rle8.bmp horse_rle8_flipped.bmp horse_bicubic_50x50.png horse_bicubic_100x100.png horse_bicubic_150x150.png horse_bicubic_300x300.png horse_bilinear_50x50.png horse_bilinear_100x100.png horse_bilinear_150x150.png horse_bilinear_300x300.png horse_box_average_50x50.png horse_box_average_100x100.png horse_box_average_150x150.png horse_box_average_300x300.png cross_bicubic_256x256.png cross_bilinear_256x256.png cross_box_average_256x256.png cross_nearest_neighb_256x256.png paste_input_background.png paste_input_black.png paste_input_overlay_transparent_border_opaque_square.png paste_input_overlay_transparent_border_semitransparent_circle.png paste_input_overlay_transparent_border_semitransparent_square.png paste_result_background_plus_circle_plus_square.png paste_result_background_plus_overlay_transparent_border_opaque_square.png paste_result_background_plus_overlay_transparent_border_semitransparent_square.png paste_result_no_background_square_over_circle.png wx.png toucan.png toucan_hue_0.538.png toucan_sat_-0.41.png toucan_bright_-0.259.png toucan_hsv_0.538_-0.41_-0.259.png toucan_light_46.png toucan_dis_240.png toucan_grey.png toucan_mono_255_255_255.png width-times-height-overflow.bmp width_height_32_bit_overflow.pgm) do if not exist image\%f copy .\image\%f image + for %f in (bitfields.bmp bitfields-alpha.bmp 8bpp-colorsused-large.bmp 8bpp-colorsused-negative.bmp rle4-delta-320x240.bmp rle8-delta-320x240.bmp rle8-delta-320x240-expected.bmp horse_grey.bmp horse_grey_flipped.bmp horse_rle4.bmp horse_rle4_flipped.bmp horse_rle8.bmp horse_rle8_flipped.bmp horse_bicubic_50x50.png horse_bicubic_100x100.png horse_bicubic_150x150.png horse_bicubic_300x300.png horse_bilinear_50x50.png horse_bilinear_100x100.png horse_bilinear_150x150.png horse_bilinear_300x300.png horse_box_average_50x50.png horse_box_average_100x100.png horse_box_average_150x150.png horse_box_average_300x300.png cross_bicubic_256x256.png cross_bilinear_256x256.png cross_box_average_256x256.png cross_nearest_neighb_256x256.png paste_input_background.png paste_input_black.png paste_input_overlay_transparent_border_opaque_square.png paste_input_overlay_transparent_border_semitransparent_circle.png paste_input_overlay_transparent_border_semitransparent_square.png paste_result_background_plus_circle_plus_square.png paste_result_background_plus_overlay_transparent_border_opaque_square.png paste_result_background_plus_overlay_transparent_border_semitransparent_square.png paste_result_no_background_square_over_circle.png wx.png toucan.png toucan_hue_0.538.png toucan_sat_-0.41.png toucan_bright_-0.259.png toucan_hsv_0.538_-0.41_-0.259.png toucan_light_46.png toucan_dis_240.png toucan_grey.png toucan_mono_255_255_255.png width-times-height-overflow.bmp width_height_32_bit_overflow.pgm bad_truncated.gif) do if not exist image\%f copy .\image\%f image -fr: +fr: if not exist $(OBJS)\intl\fr mkdir $(OBJS)\intl\fr for %f in (internat.po internat.mo) do if not exist $(OBJS)\intl\fr\%f copy .\intl\fr\%f $(OBJS)\intl\fr -ja: +ja: if not exist $(OBJS)\intl\ja mkdir $(OBJS)\intl\ja for %f in (internat.po internat.mo) do if not exist $(OBJS)\intl\ja\%f copy .\intl\ja\%f $(OBJS)\intl\ja diff --git a/tests/test.bkl b/tests/test.bkl index 0b8e222333..e687968c45 100644 --- a/tests/test.bkl +++ b/tests/test.bkl @@ -409,6 +409,8 @@ width-times-height-overflow.bmp width_height_32_bit_overflow.pgm + + bad_truncated.gif