-
* Remove dependency on `perl`, now only required for maintenance activities and running the test suite. * Exercise building qpdf and running executables from JetBrains CLion without any special additional tooling beyond pre-built external libraries. This replaces the `copy_dlls` with a powershell script, written mostly by ChatGPT, starting from the bash script below. The copy_dlls script had a lot of logic that was no longer needed. ```bash #!/bin/bash set -eo pipefail exe="$1" dest="$2" mingw_bin_dir="$3" if [[ $mingw_bin_dir == "" ]]; then echo >&2 "Usage: $(basename $0) exe dest mingw-bin-dir" exit 2 fi get_dlls() { objdump -p "$1" | grep 'DLL Name:' | awk '{print $NF}' } declare -a dlls dlls=($(get_dlls "$exe")) declare -A seen while [[ ${#dlls[@]} -gt 0 ]]; do i="${dlls[0]}" dlls=("${dlls[@]:1}") if [[ ${seen[$i]} == 1 ]]; then continue fi seen[$i]=1 full="$mingw_bin_dir/$i" if [[ -f "$full" ]]; then cp "$full" $dest/ dlls+=($(get_dlls "$full")) fi done ```
-
During xref reconstruction reject unreasonably large objects
-
Reject objects containing arrays or dictionaries with more than 5000 elements. We are by definition dealing with damaged files, and such objects are extremely likely to be invalid or malicious.
-
Don't set tree root /Limits in NNTreeIterator::resetLimits (fixes #1435)
-
Bump version to 12.1.1
-
Fix android build issues (fixes #950)
-
Implement QPDFFormFieldObjectHelper::isChecked
-
Detect shared /Kids arrays in pages tree
-
API was defined, but .cc had no implementation. PDF 2.0 manual is surprisingly unclear as to on/off values, giving /Yes in an example and /Off in descriptive text as "not on".
-
In QPDF::getAllPagesInternal include the /Kids array in the visited set for loop detection. Fixes oss-fuzz issue 411312393
-
Refactor QPDFFormFieldObjectHelper ValueSetter::writeAppearance
-
Adjusting for under/overflow by repeated incrementing/decrementing can cause excessive runtime with invalid BBox coordinates. Fixes oss-fuzz issue 409905355.
-
Detection of fseeko on Android ABI level < 24 gets a false positive if _FILE_OFFSET_BITS is not set first.
-
Thanks to github user @cdosborn for the basic enhancement.
-
Fix logic around cleartext metadata (fixes #1368)
-
Only top-level XMP metadata is supposed to be left unencrypted. All other metadata is not treated specially.
-
Allow rotate as array in job JSON (fixes #1401)
-
Replace JetBrains-specific cmake profiles with CMakePresets.json
-
Deprecate QPDF::optimize
-
Plus sneak in some spell checks
-
Fix offsets in QPDF::resolveObjectsInStream warnings
-
CMake: correctly detect that timezone is not an int
-
As discussed in #1396.
-
Internally use -1 to represent a missing offset and provide a constructor overload that allows 0 as a valid offset. In QPDF::damagedPDF use the new overload.
-
Enhance --rotate usage message (fixes #1410)
-
Also, silently fix any angle that is a multiple of 90.
-
Refactor QPDFWriter::writeObjectStreamOffsets
-
Rather than converting each (sequential) object id to a string, generate a string for the first id and than increment the digits in the string.
-
The simple CMake test that printf("%ld", timezone) to tell if HAVE_EXTERN_LONG_TIMEZONE, incorrectly saw an int after casting FreeBSD's char * timezone(int zone, int dst) pointer function to an int. By dividing it by 60 (as will occur in the .cc file), we ensure the test program to fail and thus HAVE_EXTERN_LONG_TIMEZONE not to be defined.
-
Add new CLI Option --remove-structure
-
... to remove the /Root /StructTreeRoot and /MarkInfo entries.
-
Tune QPDFWriter writes to Pl_Count