diff --git a/libs/spandsp/src/t30.c b/libs/spandsp/src/t30.c index 897ac4a449..fe909748e0 100644 --- a/libs/spandsp/src/t30.c +++ b/libs/spandsp/src/t30.c @@ -2967,7 +2967,7 @@ static int process_rx_pps(t30_state_t *s, const uint8_t *msg, int len) span_log(&s->logging, SPAN_LOG_FLOW, "Partial page OK - committing block %d, %d frames\n", s->ecm_block, s->ecm_frames); for (i = 0; i < s->ecm_frames; i++) { - if (t4_rx_put(&s->t4.rx, s->ecm_data[i], s->ecm_len[i])) + if (t4_rx_put(&s->t4.rx, s->ecm_data[i], s->ecm_len[i]) != T4_DECODE_MORE_DATA) { /* This is the end of the document */ break; @@ -5831,7 +5831,7 @@ SPAN_DECLARE_NONSTD(void) t30_non_ecm_put_bit(void *user_data, int bit) break; case T30_STATE_F_DOC_NON_ECM: /* Document transfer */ - if (t4_rx_put_bit(&s->t4.rx, bit) == T4_DECODE_OK) + if (t4_rx_put_bit(&s->t4.rx, bit) != T4_DECODE_MORE_DATA) { /* That is the end of the document */ set_state(s, T30_STATE_F_POST_DOC_NON_ECM); @@ -5871,7 +5871,7 @@ SPAN_DECLARE(void) t30_non_ecm_put(void *user_data, const uint8_t buf[], int len break; case T30_STATE_F_DOC_NON_ECM: /* Document transfer */ - if (t4_rx_put(&s->t4.rx, buf, len)) + if (t4_rx_put(&s->t4.rx, buf, len) != T4_DECODE_MORE_DATA) { /* That is the end of the document */ set_state(s, T30_STATE_F_POST_DOC_NON_ECM); diff --git a/libs/spandsp/src/t4_rx.c b/libs/spandsp/src/t4_rx.c index ea305098d3..69a98193a1 100644 --- a/libs/spandsp/src/t4_rx.c +++ b/libs/spandsp/src/t4_rx.c @@ -90,8 +90,10 @@ typedef struct } packer_t; #if defined(SPANDSP_SUPPORT_TIFF_FX) +#if TIFFLIB_VERSION >= 20120615 extern TIFFFieldArray tiff_fx_field_array; #endif +#endif SPAN_DECLARE(const char *) t4_compression_to_str(int compression) { diff --git a/libs/spandsp/src/t4_tx.c b/libs/spandsp/src/t4_tx.c index f3739c89db..991c807aaf 100644 --- a/libs/spandsp/src/t4_tx.c +++ b/libs/spandsp/src/t4_tx.c @@ -164,7 +164,7 @@ static const TIFFFieldInfo tiff_fx_tiff_field_info[] = {TIFFTAG_IMAGELAYER, 2, 2, TIFF_LONG, FIELD_CUSTOM, false, false, (char *) "ImageLayer"}, }; -#if 1 +#if TIFFLIB_VERSION >= 20120615 static TIFFField tiff_fx_tiff_fields[] = { { TIFFTAG_INDEXED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, (char *) "Indexed" }, diff --git a/libs/spandsp/src/t85_decode.c b/libs/spandsp/src/t85_decode.c index d7d1210367..82bbecf013 100644 --- a/libs/spandsp/src/t85_decode.c +++ b/libs/spandsp/src/t85_decode.c @@ -299,12 +299,14 @@ static int check_bih(t85_decode_state_t *s) #endif { span_log(&s->logging, SPAN_LOG_FLOW, "BIH invalid. Fixed bytes do not contain expected values.\n"); + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; } /* P - Number of bit planes */ if (s->buffer[2] < s->min_bit_planes || s->buffer[2] > s->max_bit_planes) { span_log(&s->logging, SPAN_LOG_FLOW, "BIH invalid. %d bit planes. Should be %d to %d.\n", s->buffer[2], s->min_bit_planes, s->max_bit_planes); + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; } s->bit_planes = s->buffer[2]; @@ -315,6 +317,7 @@ static int check_bih(t85_decode_state_t *s) if (s->xd == 0 || (s->max_xd && s->xd > s->max_xd)) { span_log(&s->logging, SPAN_LOG_FLOW, "BIH invalid. Width is %" PRIu32 "\n", s->xd); + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; } /* YD - Vertical image size at layer D */ @@ -322,6 +325,7 @@ static int check_bih(t85_decode_state_t *s) if (s->yd == 0 || (s->max_yd && s->yd > s->max_yd)) { span_log(&s->logging, SPAN_LOG_FLOW, "BIH invalid. Length is %" PRIu32 "\n", s->yd); + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; } /* L0 - Rows per stripe, at the lowest resolution */ @@ -329,6 +333,7 @@ static int check_bih(t85_decode_state_t *s) if (s->l0 == 0) { span_log(&s->logging, SPAN_LOG_FLOW, "BIH invalid. L0 is %" PRIu32 "\n", s->l0); + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; } /* MX - Maximum horizontal offset allowed for AT pixel */ @@ -336,6 +341,7 @@ static int check_bih(t85_decode_state_t *s) if (s->mx > 127) { span_log(&s->logging, SPAN_LOG_FLOW, "BIH invalid. MX is %d\n", s->mx); + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; } /* Options byte */ @@ -343,6 +349,7 @@ static int check_bih(t85_decode_state_t *s) if ((s->options & 0x97)) { span_log(&s->logging, SPAN_LOG_FLOW, "BIH invalid. Options are 0x%X\n", s->options); + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; } span_log(&s->logging, SPAN_LOG_FLOW, "BIH is OK. Image is %" PRIu32 "x%" PRIu32 " pixels\n", s->xd, s->yd); @@ -388,6 +395,8 @@ SPAN_DECLARE(int) t85_decode_put(t85_decode_state_t *s, const uint8_t data[], si { if (s->y >= s->yd) return T4_DECODE_OK; + if (s->end_of_data > 0) + return T4_DECODE_INVALID_DATA; /* This is the end of image condition */ s->end_of_data = 1; } @@ -502,7 +511,6 @@ SPAN_DECLARE(int) t85_decode_put(t85_decode_state_t *s, const uint8_t data[], si the commonest thing for us to hit here. */ decode_pscd(s, s->buffer, 2); s->buf_len = 0; - if (s->interrupt) return T4_DECODE_INTERRUPT; break; @@ -533,9 +541,11 @@ SPAN_DECLARE(int) t85_decode_put(t85_decode_state_t *s, const uint8_t data[], si continue; s->buf_needed = 2; s->buf_len = 0; - if (s->at_moves >= T85_ATMOVES_MAX) + { + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; + } s->at_row[s->at_moves] = pack_32(&s->buffer[2]); s->at_tx[s->at_moves] = s->buffer[6]; if (s->at_tx[s->at_moves] > s->mx @@ -544,6 +554,7 @@ SPAN_DECLARE(int) t85_decode_put(t85_decode_state_t *s, const uint8_t data[], si || s->buffer[7] != 0) { + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; } s->at_moves++; @@ -554,14 +565,19 @@ SPAN_DECLARE(int) t85_decode_put(t85_decode_state_t *s, const uint8_t data[], si continue; s->buf_needed = 2; s->buf_len = 0; - if (!(s->options & T85_VLENGTH)) + { + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; + } s->options &= ~T85_VLENGTH; y = pack_32(&s->buffer[2]); /* An update to the image length is not allowed to stretch it. */ if (y > s->yd) + { + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; + } s->yd = y; break; case T82_SDNORM: @@ -643,7 +659,10 @@ SPAN_DECLARE(int) t85_decode_put(t85_decode_state_t *s, const uint8_t data[], si y = pack_32(&s->buffer[4]); /* An update to the image length is not allowed to stretch it. */ if (y > s->yd) + { + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; + } /* Things look OK, so accept this new length, and proceed. */ s->yd = y; /* Now process the T82_SDNORM or T82_SDRST */ @@ -657,6 +676,7 @@ SPAN_DECLARE(int) t85_decode_put(t85_decode_state_t *s, const uint8_t data[], si break; default: s->buf_len = 0; + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; } } @@ -673,10 +693,12 @@ SPAN_DECLARE(int) t85_decode_put(t85_decode_state_t *s, const uint8_t data[], si /* We should only have stopped processing PSCD if we ran out of data, or hit a T82_ESC */ if (cnt < len && data[cnt] != T82_ESC) + { + s->end_of_data = 2; return T4_DECODE_INVALID_DATA; + } } } - return T4_DECODE_MORE_DATA; } /*- End of function --------------------------------------------------------*/