Commit 5806e30595b7f47d3a06c156b92a7cb034f84ba1

Authored by m-holger
1 parent f126bfa7

Refactor SF_Crypt to use `final` and improve `setDecodeParms`.

Updated `SF_Crypt` class methods and destructor to use the `final` specifier for clarity and stricter override rules. Refactored `setDecodeParms` logic for better readability and accurate handling of dictionary keys. Other minor adjustments contribute to code maintainability and correctness.
Showing 1 changed file with 20 additions and 16 deletions
libqpdf/QPDF_Stream.cc
... ... @@ -27,33 +27,37 @@ using namespace qpdf;
27 27  
28 28 namespace
29 29 {
30   - class SF_Crypt: public QPDFStreamFilter
  30 + class SF_Crypt final: public QPDFStreamFilter
31 31 {
32 32 public:
33 33 SF_Crypt() = default;
34   - ~SF_Crypt() override = default;
  34 + ~SF_Crypt() final = default;
35 35  
36 36 bool
37   - setDecodeParms(QPDFObjectHandle decode_parms) override
  37 + setDecodeParms(QPDFObjectHandle decode_parms) final
38 38 {
39   - if (decode_parms.isNull()) {
40   - return true;
41   - }
42   - bool filterable = true;
43   - for (auto const& key: decode_parms.getKeys()) {
44   - if (((key == "/Type") || (key == "/Name")) &&
45   - ((!decode_parms.hasKey("/Type")) ||
46   - decode_parms.isDictionaryOfType("/CryptFilterDecodeParms"))) {
47   - // we handle this in decryptStream
48   - } else {
49   - filterable = false;
  39 + // we only validate here - processing happens in decryptStream
  40 + if (auto dict = decode_parms.as_dictionary(optional)) {
  41 + for (auto const& [key, value]: dict) {
  42 + if (key == "/Type" &&
  43 + (value.null() ||
  44 + (value.isName() && value.getName() == "/CryptFilterDecodeParms"))) {
  45 + continue;
  46 + }
  47 + if (key == "/Name") {
  48 + continue;
  49 + }
  50 + if (!value.null()) {
  51 + return false;
  52 + }
50 53 }
  54 + return true;
51 55 }
52   - return filterable;
  56 + return false;
53 57 }
54 58  
55 59 Pipeline*
56   - getDecodePipeline(Pipeline*) override
  60 + getDecodePipeline(Pipeline*) final
57 61 {
58 62 // Not used -- handled by pipeStreamData
59 63 return nullptr;
... ...