[gs-commits] ghostpdl branch, master, updated. jbig2dec-0.14-1634-g1c6d485
[email protected] (Sebastian Rasmussen)
| Newsgroups | gmane.comp.printing.ghostscript.cvs |
|---|---|
| Message-ID | <[email protected]> |
The ghostpdl branch, master has been updated
via 1c6d485f4ba59072fba1a73f8f61071b00d7a7e6 (commit)
from b7d32c453538bee41c34f8a77a3feb1dcc0ce759 (commit)
----------------------------------------------------------------------
commit 1c6d485f4ba59072fba1a73f8f61071b00d7a7e6
Author: Sebastian Rasmussen <[email protected]>
Date: Wed Oct 31 20:22:11 2018 +0100
Bug 700088: Report error if all wanted J2K components are not decoded.
Ghostscript used to attempt to use even the undecoded components.
The source code for upstream's opj_decompress tool avoided this by
a workaround along with a comment indicating that this ought to be
done in the library (so all clients, e.g. Ghostscript will benefit
from it). With this commit the library will error out if not all
requested components are successfully decoded. Thus Ghostscript
will no longer crash.
Reported in https://github.com/uclouvain/openjpeg/issues/1158
sent upstream in https://github.com/uclouvain/openjpeg/pull/1164
and finally committed in e66125fe260deee49fdf6e9978d9bd29871dd5bb
diff --git a/openjpeg/src/bin/jp2/opj_decompress.c b/openjpeg/src/bin/jp2/opj_decompress.c
index 8c5a125..1336bed 100644
--- a/openjpeg/src/bin/jp2/opj_decompress.c
+++ b/openjpeg/src/bin/jp2/opj_decompress.c
@@ -1570,17 +1570,6 @@ int main(int argc, char **argv)
}
}
- /* FIXME? Shouldn't that situation be considered as an error of */
- /* opj_decode() / opj_get_decoded_tile() ? */
- if (image->comps[0].data == NULL) {
- fprintf(stderr, "ERROR -> opj_decompress: no image data!\n");
- opj_destroy_codec(l_codec);
- opj_stream_destroy(l_stream);
- opj_image_destroy(image);
- failed = 1;
- goto fin;
- }
-
tCumulative += opj_clock() - t;
numDecompressedImages++;
diff --git a/openjpeg/src/lib/openjp2/j2k.c b/openjpeg/src/lib/openjp2/j2k.c
index 07b92d0..25e0a34 100644
--- a/openjpeg/src/lib/openjp2/j2k.c
+++ b/openjpeg/src/lib/openjp2/j2k.c
@@ -10645,6 +10645,42 @@ static OPJ_BOOL opj_j2k_allocate_tile_element_cstr_index(opj_j2k_t *p_j2k)
return OPJ_TRUE;
}
+static OPJ_BOOL opj_j2k_are_all_used_components_decoded(opj_j2k_t *p_j2k,
+ opj_event_mgr_t * p_manager)
+{
+ OPJ_UINT32 compno;
+ OPJ_BOOL decoded_all_used_components = OPJ_TRUE;
+
+ if (p_j2k->m_specific_param.m_decoder.m_numcomps_to_decode) {
+ for (compno = 0;
+ compno < p_j2k->m_specific_param.m_decoder.m_numcomps_to_decode; compno++) {
+ OPJ_UINT32 dec_compno =
+ p_j2k->m_specific_param.m_decoder.m_comps_indices_to_decode[compno];
+ if (p_j2k->m_output_image->comps[dec_compno].data == NULL) {
+ opj_event_msg(p_manager, EVT_WARNING, "Failed to decode component %d\n",
+ dec_compno);
+ decoded_all_used_components = OPJ_FALSE;
+ }
+ }
+ } else {
+ for (compno = 0; compno < p_j2k->m_output_image->numcomps; compno++) {
+ if (p_j2k->m_output_image->comps[compno].data == NULL) {
+ opj_event_msg(p_manager, EVT_WARNING, "Failed to decode component %d\n",
+ compno);
+ decoded_all_used_components = OPJ_FALSE;
+ }
+ }
+ }
+
+ if (decoded_all_used_components == OPJ_FALSE) {
+ opj_event_msg(p_manager, EVT_ERROR, "Failed to decode all used components\n");
+ return OPJ_FALSE;
+ }
+
+ return OPJ_TRUE;
+}
+
+
static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k,
opj_stream_private_t *p_stream,
opj_event_mgr_t * p_manager)
@@ -10756,6 +10792,10 @@ static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k,
}
}
+ if (! opj_j2k_are_all_used_components_decoded(p_j2k, p_manager)) {
+ return OPJ_FALSE;
+ }
+
return OPJ_TRUE;
}
@@ -10884,6 +10924,10 @@ static OPJ_BOOL opj_j2k_decode_one_tile(opj_j2k_t *p_j2k,
}
+ if (! opj_j2k_are_all_used_components_decoded(p_j2k, p_manager)) {
+ return OPJ_FALSE;
+ }
+
return OPJ_TRUE;
}
Summary of changes:
openjpeg/src/bin/jp2/opj_decompress.c | 11 ---------
openjpeg/src/lib/openjp2/j2k.c | 44 +++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+), 11 deletions(-)