diff --git a/lib/jpegli/decode.cc b/lib/jpegli/decode.cc index cd0feb9a..1e8f3130 100644 --- a/lib/jpegli/decode.cc +++ b/lib/jpegli/decode.cc @@ -597,7 +597,7 @@ void jpegli_save_markers(j_decompress_ptr cinfo, int marker_code, unsigned int length_limit) { // TODO(szabadka) Limit our memory usage by taking into account length_limit. jpeg_decomp_master* m = cinfo->master; - if (marker_code < 0xe0) { + if (marker_code < 0xe0 || marker_code > 0xff) { JPEGLI_ERROR("jpegli_save_markers: invalid marker code %d", marker_code); } m->markers_to_save_[marker_code - 0xe0] = 1; diff --git a/lib/jpegli/error_handling_test.cc b/lib/jpegli/error_handling_test.cc index fb39c939..beb89e15 100644 --- a/lib/jpegli/error_handling_test.cc +++ b/lib/jpegli/error_handling_test.cc @@ -1078,6 +1078,18 @@ TEST(DecoderErrorHandlingTest, MinimalSuccess) { jpegli_destroy_decompress(&cinfo); } +TEST(DecoderErrorHandlingTest, InvalidSaveMarkersCode) { + jpeg_decompress_struct cinfo = {}; + const auto try_catch_block = [&]() -> bool { + ERROR_HANDLER_SETUP(jpegli); + jpegli_create_decompress(&cinfo); + jpegli_save_markers(&cinfo, 0x100, 0xffff); + return true; + }; + EXPECT_FALSE(try_catch_block()); + jpegli_destroy_decompress(&cinfo); +} + TEST(DecoderErrorHandlingTest, NoSource) { jpeg_decompress_struct cinfo = {}; const auto try_catch_block = [&]() -> bool {