The QPDF 12.2 API differs from the initially-written calls: - processInputFile → processFile - getArrayAsArray → getArrayAsVector - setOutputFile(string) → setOutputFilename(const char*) - setQDF → setQDFMode The spike CMakeLists now finds QPDF via either a CMake config target (qpdf::libqpdf for system packages, QPDF::qpdf for vcpkg) or a pkg-config fallback (PkgConfig::QPDF), so it builds against the Debian libqpdf-dev package as well as a vcpkg manifest install. The contract test target was missing SpikeRunner.cpp from its sources, causing a link error; added it with the spike/ include directory. ASan caught a heap-use-after-free in the initial write path: QPDFWriter retains the const char* passed to setOutputFilename and dereferences it during write(), after the temporary std::string from output.string() is destroyed. Both the input and output filename strings are now kept alive across the QPDF calls that retain them. This is exactly the bug class the §7.2 sanitizers-in-CI posture exists to catch. Builds and passes under GCC 14.2 + Qt 6.8.2 + QPDF 12.2, both Release and ASan+UBSan configurations. Signed-off-by: ai-ad4 <ai-ad4@users.noreply.gitea.lm.je> |
||
|---|---|---|
| .. | ||
| A_verbatim_roundtrip | ||
| common | ||
| CMakeLists.txt | ||