From f447a804d6e13306a0b959c7ee445c8a84fe1a84 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 14 Apr 2020 23:11:33 +0200 Subject: Add an explicit exception for J2K decompression failures. --- src/exceptions.h | 12 ++++++++++++ src/j2k.cc | 14 +++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/exceptions.h b/src/exceptions.h index cd4f5fbb..b58d0240 100644 --- a/src/exceptions.h +++ b/src/exceptions.h @@ -121,6 +121,18 @@ private: }; +/** @class J2KDecompressionError + * @brief An error that occurs during decompression of JPEG2000 data. + */ +class J2KDecompressionError : public ReadError +{ +public: + explicit J2KDecompressionError (std::string message) + : ReadError (message) + {} +}; + + class BadContentKindError : public ReadError { public: diff --git a/src/j2k.cc b/src/j2k.cc index 4aca621e..7854e683 100644 --- a/src/j2k.cc +++ b/src/j2k.cc @@ -90,8 +90,16 @@ read_free_function (void* data) delete reinterpret_cast(data); } + +static void +decompress_error_callback (char const * msg, void *) +{ + throw J2KDecompressionError (msg); +} + + static void -error_callback (char const * msg, void *) +compress_error_callback (char const * msg, void *) { throw MiscError (msg); } @@ -140,7 +148,7 @@ dcp::decompress_j2k (uint8_t* data, int64_t size, int reduce) throw MiscError ("could not create JPEG2000 stream"); } - opj_set_error_handler(decoder, error_callback, 00); + opj_set_error_handler(decoder, decompress_error_callback, 00); opj_stream_set_read_function (stream, read_function); ReadBuffer* buffer = new ReadBuffer (data, size); @@ -273,7 +281,7 @@ dcp::compress_j2k (shared_ptr xyz, int bandwidth, int frame throw MiscError ("could not create JPEG2000 encoder"); } - opj_set_error_handler (encoder, error_callback, 0); + opj_set_error_handler (encoder, compress_error_callback, 0); /* Set encoding parameters to default values */ opj_cparameters_t parameters; -- cgit v1.2.3