diff options
author | Jay Berkenbilt <ejb@ql.org> | 2021-11-02 22:54:10 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2021-11-03 14:43:17 +0100 |
commit | 532a4f3d60f6981b22beb32e6ff688ec41f87e26 (patch) | |
tree | 73800f3a6da80171152df8c9236ce390bcd581f4 /zlib-flate/zlib-flate.cc | |
parent | c491d9f6af8dd2ecfbc5bd70b2054e03ac2521ac (diff) | |
download | qpdf-532a4f3d60f6981b22beb32e6ff688ec41f87e26.tar.zst |
Detect recoverable but invalid zlib data streams (fixes #562)
Diffstat (limited to 'zlib-flate/zlib-flate.cc')
-rw-r--r-- | zlib-flate/zlib-flate.cc | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/zlib-flate/zlib-flate.cc b/zlib-flate/zlib-flate.cc index 4d65bcc3..ae0fa4e1 100644 --- a/zlib-flate/zlib-flate.cc +++ b/zlib-flate/zlib-flate.cc @@ -76,6 +76,12 @@ int main(int argc, char* argv[]) PointerHolder<Pl_StdioFile> out = new Pl_StdioFile("stdout", stdout); PointerHolder<Pl_Flate> flate = new Pl_Flate("flate", out.getPointer(), action); + bool warn = false; + flate->setWarnCallback([&warn](char const* msg, int code) { + warn = true; + std::cerr << whoami << ": WARNING: zlib code " << code + << ", msg = " << msg << std::endl; + }); try { @@ -97,9 +103,13 @@ int main(int argc, char* argv[]) } catch (std::exception& e) { - std::cerr << e.what() << std::endl; + std::cerr << whoami << ": " << e.what() << std::endl; exit(2); } + if (warn) + { + exit(3); + } return 0; } |