|
Lines 15-20
Link Here
|
| 15 |
#include <stdio.h> |
15 |
#include <stdio.h> |
| 16 |
#include <stdlib.h> |
16 |
#include <stdlib.h> |
| 17 |
#include <stddef.h> |
17 |
#include <stddef.h> |
|
|
18 |
#include <limits.h> |
| 18 |
#ifndef WIN32 |
19 |
#ifndef WIN32 |
| 19 |
#include <unistd.h> |
20 |
#include <unistd.h> |
| 20 |
#endif |
21 |
#endif |
|
Lines 420-432
Link Here
|
| 420 |
width = widthA; |
421 |
width = widthA; |
| 421 |
nComps = nCompsA; |
422 |
nComps = nCompsA; |
| 422 |
nBits = nBitsA; |
423 |
nBits = nBitsA; |
|
|
424 |
predLine = NULL; |
| 425 |
ok = gFalse; |
| 423 |
|
426 |
|
|
|
427 |
if (width <= 0 || nComps <= 0 || nBits <= 0 || |
| 428 |
nComps >= INT_MAX/nBits || |
| 429 |
width >= INT_MAX/nComps/nBits) { |
| 430 |
return; |
| 431 |
} |
| 424 |
nVals = width * nComps; |
432 |
nVals = width * nComps; |
|
|
433 |
if (nVals * nBits + 7 <= 0) { |
| 434 |
return; |
| 435 |
} |
| 425 |
pixBytes = (nComps * nBits + 7) >> 3; |
436 |
pixBytes = (nComps * nBits + 7) >> 3; |
| 426 |
rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes; |
437 |
rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes; |
|
|
438 |
if (rowBytes < 0) { |
| 439 |
return; |
| 440 |
} |
| 427 |
predLine = (Guchar *)gmalloc(rowBytes); |
441 |
predLine = (Guchar *)gmalloc(rowBytes); |
| 428 |
memset(predLine, 0, rowBytes); |
442 |
memset(predLine, 0, rowBytes); |
| 429 |
predIdx = rowBytes; |
443 |
predIdx = rowBytes; |
|
|
444 |
|
| 445 |
ok = gTrue; |
| 430 |
} |
446 |
} |
| 431 |
|
447 |
|
| 432 |
StreamPredictor::~StreamPredictor() { |
448 |
StreamPredictor::~StreamPredictor() { |
|
Lines 1020-1025
Link Here
|
| 1020 |
FilterStream(strA) { |
1036 |
FilterStream(strA) { |
| 1021 |
if (predictor != 1) { |
1037 |
if (predictor != 1) { |
| 1022 |
pred = new StreamPredictor(this, predictor, columns, colors, bits); |
1038 |
pred = new StreamPredictor(this, predictor, columns, colors, bits); |
|
|
1039 |
if (!pred->isOk()) { |
| 1040 |
delete pred; |
| 1041 |
pred = NULL; |
| 1042 |
} |
| 1023 |
} else { |
1043 |
} else { |
| 1024 |
pred = NULL; |
1044 |
pred = NULL; |
| 1025 |
} |
1045 |
} |
|
Lines 2907-2912
Link Here
|
| 2907 |
height = read16(); |
2927 |
height = read16(); |
| 2908 |
width = read16(); |
2928 |
width = read16(); |
| 2909 |
numComps = str->getChar(); |
2929 |
numComps = str->getChar(); |
|
|
2930 |
if (numComps <= 0 || numComps > 4) { |
| 2931 |
error(getPos(), "Bad number of components in DCT stream", prec); |
| 2932 |
return gFalse; |
| 2933 |
} |
| 2910 |
if (prec != 8) { |
2934 |
if (prec != 8) { |
| 2911 |
error(getPos(), "Bad DCT precision %d", prec); |
2935 |
error(getPos(), "Bad DCT precision %d", prec); |
| 2912 |
return gFalse; |
2936 |
return gFalse; |
|
Lines 2933-2938
Link Here
|
| 2933 |
height = read16(); |
2957 |
height = read16(); |
| 2934 |
width = read16(); |
2958 |
width = read16(); |
| 2935 |
numComps = str->getChar(); |
2959 |
numComps = str->getChar(); |
|
|
2960 |
if (numComps <= 0 || numComps > 4) { |
| 2961 |
error(getPos(), "Bad number of components in DCT stream", prec); |
| 2962 |
return gFalse; |
| 2963 |
} |
| 2936 |
if (prec != 8) { |
2964 |
if (prec != 8) { |
| 2937 |
error(getPos(), "Bad DCT precision %d", prec); |
2965 |
error(getPos(), "Bad DCT precision %d", prec); |
| 2938 |
return gFalse; |
2966 |
return gFalse; |
|
Lines 2955-2960
Link Here
|
| 2955 |
|
2983 |
|
| 2956 |
length = read16() - 2; |
2984 |
length = read16() - 2; |
| 2957 |
scanInfo.numComps = str->getChar(); |
2985 |
scanInfo.numComps = str->getChar(); |
|
|
2986 |
if (scanInfo.numComps <= 0 || scanInfo.numComps > 4) { |
| 2987 |
error(getPos(), "Bad number of components in DCT stream"); |
| 2988 |
return gFalse; |
| 2989 |
} |
| 2958 |
--length; |
2990 |
--length; |
| 2959 |
if (length != 2 * scanInfo.numComps + 3) { |
2991 |
if (length != 2 * scanInfo.numComps + 3) { |
| 2960 |
error(getPos(), "Bad DCT scan info block"); |
2992 |
error(getPos(), "Bad DCT scan info block"); |
|
Lines 3268-3273
Link Here
|
| 3268 |
FilterStream(strA) { |
3300 |
FilterStream(strA) { |
| 3269 |
if (predictor != 1) { |
3301 |
if (predictor != 1) { |
| 3270 |
pred = new StreamPredictor(this, predictor, columns, colors, bits); |
3302 |
pred = new StreamPredictor(this, predictor, columns, colors, bits); |
|
|
3303 |
if (!pred->isOk()) { |
| 3304 |
delete pred; |
| 3305 |
pred = NULL; |
| 3306 |
} |
| 3271 |
} else { |
3307 |
} else { |
| 3272 |
pred = NULL; |
3308 |
pred = NULL; |
| 3273 |
} |
3309 |
} |