50 lines
1.6 KiB
Diff
Raw Normal View History

diff --git a/jdmarker.c b/jdmarker.c
index f2a9cc4..2edebc2 100644
--- a/jdmarker.c
+++ b/jdmarker.c
@@ -305,7 +305,7 @@ get_sos (j_decompress_ptr cinfo)
/* Process a SOS marker */
{
INT32 length;
- int i, ci, n, c, cc;
+ int i, j, ci, n, c, cc;
jpeg_component_info * compptr;
INPUT_VARS(cinfo);
@@ -340,7 +340,11 @@ get_sos (j_decompress_ptr cinfo)
ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc);
id_found:
-
+ for (j = 0; j < i; j++) {
+ if (cinfo->cur_comp_info[j] == compptr) {
+ ERREXIT1(cinfo, JERR_DUP_COMPONENT_ID, cc);
+ }
+ }
cinfo->cur_comp_info[i] = compptr;
compptr->dc_tbl_no = (c >> 4) & 15;
compptr->ac_tbl_no = (c ) & 15;
@@ -480,7 +484,9 @@ get_dht (j_decompress_ptr cinfo)
*htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits));
- MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval));
+ MEMCOPY((*htblptr)->huffval, huffval, count);
+
+ MEMZERO((*htblptr)->huffval + count, SIZEOF( (*htblptr)->huffval) - count);
}
if (length != 0)
diff --git a/jerror.h b/jerror.h
index 1cfb2b1..4007c49 100644
--- a/jerror.h
+++ b/jerror.h
@@ -77,6 +77,7 @@ JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d")
JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x")
JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d")
JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d")
+JMESSAGE(JERR_DUP_COMPONENT_ID, "Duplicate component ID")
JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)")
JMESSAGE(JERR_EMS_READ, "Read from EMS failed")
JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed")