Skip to content

Commit 1e84674

Browse files
committed
Changed the JPC bitstream code to more gracefully handle a request
for a larger sized integer than what can be handled (i.e., return with an error instead of failing an assert).
1 parent dee11ec commit 1e84674

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

Diff for: src/libjasper/jpc/jpc_bs.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,10 @@ long jpc_bitstream_getbits(jpc_bitstream_t *bitstream, int n)
194194

195195
/* We can reliably get at most 31 bits since ISO/IEC 9899 only
196196
guarantees that a long can represent values up to 2^31-1. */
197-
assert(n >= 0 && n < 32);
197+
//assert(n >= 0 && n < 32);
198+
if (n < 0 || n >= 32) {
199+
return -1;
200+
}
198201

199202
/* Get the number of bits requested from the specified bit stream. */
200203
v = 0;
@@ -214,7 +217,10 @@ int jpc_bitstream_putbits(jpc_bitstream_t *bitstream, int n, long v)
214217

215218
/* We can reliably put at most 31 bits since ISO/IEC 9899 only
216219
guarantees that a long can represent values up to 2^31-1. */
217-
assert(n >= 0 && n < 32);
220+
//assert(n >= 0 && n < 32);
221+
if (n < 0 || n >= 32) {
222+
return EOF;
223+
}
218224
/* Ensure that only the bits to be output are nonzero. */
219225
assert(!(v & (~JAS_ONES(n))));
220226

Diff for: src/libjasper/jpc/jpc_cs.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -904,8 +904,8 @@ static int jpc_qcd_dumpparms(jpc_ms_t *ms, FILE *out)
904904
(int) qcd->compparms.qntsty, qcd->compparms.numguard, qcd->compparms.numstepsizes);
905905
for (i = 0; i < qcd->compparms.numstepsizes; ++i) {
906906
fprintf(out, "expn[%d] = 0x%04x; mant[%d] = 0x%04x;\n",
907-
i, (unsigned) JPC_QCX_GETEXPN(qcd->compparms.stepsizes[i]),
908-
i, (unsigned) JPC_QCX_GETMANT(qcd->compparms.stepsizes[i]));
907+
i, JAS_CAST(unsigned, JPC_QCX_GETEXPN(qcd->compparms.stepsizes[i])),
908+
i, JAS_CAST(unsigned, JPC_QCX_GETMANT(qcd->compparms.stepsizes[i])));
909909
}
910910
return 0;
911911
}

Diff for: src/libjasper/jpc/jpc_dec.c

+1
Original file line numberDiff line numberDiff line change
@@ -1641,6 +1641,7 @@ static void calcstepsizes(uint_fast16_t refstepsize, int numrlvls,
16411641
mant = JPC_QCX_GETMANT(refstepsize);
16421642
numbands = 3 * numrlvls - 2;
16431643
for (bandno = 0; bandno < numbands; ++bandno) {
1644+
//jas_eprintf("DEBUG %d %d %d %d %d\n", bandno, expn, numrlvls, bandno, ((numrlvls - 1) - (numrlvls - 1 - ((bandno > 0) ? ((bandno + 2) / 3) : (0)))));
16441645
stepsizes[bandno] = JPC_QCX_MANT(mant) | JPC_QCX_EXPN(expn +
16451646
(numrlvls - 1) - (numrlvls - 1 - ((bandno > 0) ? ((bandno + 2) / 3) : (0))));
16461647
}

0 commit comments

Comments
 (0)