Commit a496dbe8b282e323b091aafe2c596068d642b8fb

Authored by m-holger
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,7 +14,6 @@ SF_FlateLzwDecode::setDecodeParms(QPDFObjectHandle decode_parms)
14 return true; 14 return true;
15 } 15 }
16 16
17 - bool filterable = true;  
18 std::set<std::string> keys = decode_parms.getKeys(); 17 std::set<std::string> keys = decode_parms.getKeys();
19 for (auto const& key: keys) { 18 for (auto const& key: keys) {
20 QPDFObjectHandle value = decode_parms.getKey(key); 19 QPDFObjectHandle value = decode_parms.getKey(key);
@@ -22,10 +21,10 @@ SF_FlateLzwDecode::setDecodeParms(QPDFObjectHandle decode_parms) @@ -22,10 +21,10 @@ SF_FlateLzwDecode::setDecodeParms(QPDFObjectHandle decode_parms)
22 if (value.isInteger()) { 21 if (value.isInteger()) {
23 predictor = value.getIntValueAsInt(); 22 predictor = value.getIntValueAsInt();
24 if (!(predictor == 1 || predictor == 2 || (predictor >= 10 && predictor <= 15))) { 23 if (!(predictor == 1 || predictor == 2 || (predictor >= 10 && predictor <= 15))) {
25 - filterable = false; 24 + return false;
26 } 25 }
27 } else { 26 } else {
28 - filterable = false; 27 + return false;
29 } 28 }
30 } else if (key == "/Columns" || key == "/Colors" || key == "/BitsPerComponent") { 29 } else if (key == "/Columns" || key == "/Colors" || key == "/BitsPerComponent") {
31 if (value.isInteger()) { 30 if (value.isInteger()) {
@@ -38,26 +37,26 @@ SF_FlateLzwDecode::setDecodeParms(QPDFObjectHandle decode_parms) @@ -38,26 +37,26 @@ SF_FlateLzwDecode::setDecodeParms(QPDFObjectHandle decode_parms)
38 bits_per_component = val; 37 bits_per_component = val;
39 } 38 }
40 } else { 39 } else {
41 - filterable = false; 40 + return false;
42 } 41 }
43 } else if (lzw && (key == "/EarlyChange")) { 42 } else if (lzw && (key == "/EarlyChange")) {
44 if (value.isInteger()) { 43 if (value.isInteger()) {
45 int earlychange = value.getIntValueAsInt(); 44 int earlychange = value.getIntValueAsInt();
46 early_code_change = (earlychange == 1); 45 early_code_change = (earlychange == 1);
47 if (!(earlychange == 0 || earlychange == 1)) { 46 if (!(earlychange == 0 || earlychange == 1)) {
48 - filterable = false; 47 + return false;
49 } 48 }
50 } else { 49 } else {
51 - filterable = false; 50 + return false;
52 } 51 }
53 } 52 }
54 } 53 }
55 54
56 if (predictor > 1 && columns == 0) { 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 Pipeline* 62 Pipeline*