Commit a496dbe8b282e323b091aafe2c596068d642b8fb
1 parent
a8631e25
In SF_FlateLzwDecode::setDecodeParms return early on failure
The stream filter is only used if the stream is filterable, therefore there is no point continuing to set decode parameters once it is recognized that the stream is not filterable.
Showing
1 changed file
with
7 additions
and
8 deletions
libqpdf/SF_FlateLzwDecode.cc
| ... | ... | @@ -14,7 +14,6 @@ SF_FlateLzwDecode::setDecodeParms(QPDFObjectHandle decode_parms) |
| 14 | 14 | return true; |
| 15 | 15 | } |
| 16 | 16 | |
| 17 | - bool filterable = true; | |
| 18 | 17 | std::set<std::string> keys = decode_parms.getKeys(); |
| 19 | 18 | for (auto const& key: keys) { |
| 20 | 19 | QPDFObjectHandle value = decode_parms.getKey(key); |
| ... | ... | @@ -22,10 +21,10 @@ SF_FlateLzwDecode::setDecodeParms(QPDFObjectHandle decode_parms) |
| 22 | 21 | if (value.isInteger()) { |
| 23 | 22 | predictor = value.getIntValueAsInt(); |
| 24 | 23 | if (!(predictor == 1 || predictor == 2 || (predictor >= 10 && predictor <= 15))) { |
| 25 | - filterable = false; | |
| 24 | + return false; | |
| 26 | 25 | } |
| 27 | 26 | } else { |
| 28 | - filterable = false; | |
| 27 | + return false; | |
| 29 | 28 | } |
| 30 | 29 | } else if (key == "/Columns" || key == "/Colors" || key == "/BitsPerComponent") { |
| 31 | 30 | if (value.isInteger()) { |
| ... | ... | @@ -38,26 +37,26 @@ SF_FlateLzwDecode::setDecodeParms(QPDFObjectHandle decode_parms) |
| 38 | 37 | bits_per_component = val; |
| 39 | 38 | } |
| 40 | 39 | } else { |
| 41 | - filterable = false; | |
| 40 | + return false; | |
| 42 | 41 | } |
| 43 | 42 | } else if (lzw && (key == "/EarlyChange")) { |
| 44 | 43 | if (value.isInteger()) { |
| 45 | 44 | int earlychange = value.getIntValueAsInt(); |
| 46 | 45 | early_code_change = (earlychange == 1); |
| 47 | 46 | if (!(earlychange == 0 || earlychange == 1)) { |
| 48 | - filterable = false; | |
| 47 | + return false; | |
| 49 | 48 | } |
| 50 | 49 | } else { |
| 51 | - filterable = false; | |
| 50 | + return false; | |
| 52 | 51 | } |
| 53 | 52 | } |
| 54 | 53 | } |
| 55 | 54 | |
| 56 | 55 | if (predictor > 1 && columns == 0) { |
| 57 | - filterable = false; | |
| 56 | + return false; | |
| 58 | 57 | } |
| 59 | 58 | |
| 60 | - return filterable; | |
| 59 | + return true; | |
| 61 | 60 | } |
| 62 | 61 | |
| 63 | 62 | Pipeline* | ... | ... |