2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-12-22 19:08:59 +00:00
Commit Graph

1851 Commits

Author SHA1 Message Date
m-holger
4f54508f7f Refactor QPDFJob::doJSONObjects 2024-02-16 15:50:30 +00:00
m-holger
f0bc2f11ef Expose QPDFObjectHandle::writeJSON 2024-02-16 14:09:28 +00:00
m-holger
c06653c3ab Refactor QPDF::writeJSON 2024-02-16 12:00:37 +00:00
m-holger
b9bc05356a Refactor QPDF::writeJSONStream
Use QPDF_Stream::writeStreamJSON.
Factor out the json_stream_data == qpdf_sj_file case.
2024-02-16 11:51:10 +00:00
m-holger
b15d0bf6e1 Add new method QPDF_Stream::writeStreamJSON
(Replacing the temporary implementation from the last commit.)
2024-02-16 11:37:50 +00:00
m-holger
920e929864 Reimplement QPDF_Stream::getStreamJSON in terms of writeStreamJSON
writeStreamJSON is a temporary implementation minimally adapted from
getStreamJSON.
2024-02-16 11:07:20 +00:00
m-holger
9589fad1e5 Reimplement QPDFObjectHandle::getJSON in terms of writeJSON 2024-02-16 11:00:20 +00:00
m-holger
431987475b Add new method QPDF_Name::analyzeJSONEncoding
Provide a custom method to check whether a name is valid utf8. Integrate
checking for characters that need to be escaped in JSON.
2024-02-16 10:52:44 +00:00
m-holger
e2737ab646 Add new writeJSON methods
Create an alternative to getJSON to allow an object handle to be written as JSON without the overhead of creating a JSON object.
2024-02-16 10:51:25 +00:00
m-holger
9e90007a4a Add new private class JSON::Writer
Create a simple utility class for writing JSON to a pipeline.
2024-02-16 10:32:41 +00:00
Jay Berkenbilt
b1dad0de2a Fix previous fix to setting checkbox value (fixes #1056)
The code accepted values other than /Yes but still used /Yes as the
checked value instead of obeying the normal appearance dictionary.
2024-02-11 15:49:44 -05:00
Jay Berkenbilt
b1b789df42 Detect end of input inside an unfinished JSON string 2024-02-06 15:30:29 -05:00
Jay Berkenbilt
3490090fbc Detect JSON object whose value is an indirect object 2024-02-06 15:12:41 -05:00
Jay Berkenbilt
7ae095fa09 Fix JSON parser error found by fuzz 2024-02-04 17:27:49 -05:00
Jay Berkenbilt
cb0f390cc1 Handle parse error stream data (fixes #1123)
A parse error in stream data in which stream data contained a nested
object would cause a crash because qpdf was not correctly updating its
internal state. Rework the QPDF json reactor to not be sensitive to
parse errors in this way.
2024-02-04 17:27:49 -05:00
Jay Berkenbilt
7caa9ddf5a Format code 2024-02-04 16:12:01 -05:00
Jay Berkenbilt
532cc58d7e
Merge pull request #1138 from m-holger/j_key
Allow "n:/pdf-syntax" JSON syntax for dictionary keys
2024-02-03 13:09:31 -05:00
Jay Berkenbilt
b1ec5ba883 Merge branch 'fz' of github.com:m-holger/qpdf into fz 2024-02-03 11:21:35 -05:00
m-holger
8ff20b0089 Allow "n:/pdf-syntax" JSON syntax for dictionary keys 2024-01-29 13:22:58 +00:00
m-holger
d946ad6c30 In Pl_TIFFPredictor::processRow buffer output 2024-01-27 17:16:53 +00:00
m-holger
20ca1e8644 In Pl_TIFFPredictor::processRow optimize 8 bits_per_sample case 2024-01-27 12:04:36 +00:00
m-holger
b7abb12f55 In Pl_TIFFPredictor::processRow remove special case for first column 2024-01-26 20:56:21 +00:00
m-holger
c01fc3c2ae In Pl_TIFFPredictor::processRow avoid repeated vector allocation
Also, modernize for loop.
2024-01-26 20:51:29 +00:00
m-holger
2e8b5f290c In Pl_TIFFPredictor avoid repeated calls to getNext 2024-01-26 20:46:38 +00:00
m-holger
73dec35209 Simplify address arithmetic in Pl_TIFFPredictor 2024-01-26 20:44:07 +00:00
m-holger
5b7a44e1cc In Pl_TIFFPredictor remove calls to memcpy
Instead of overwriting cur_row.data() use clear and insert.
2024-01-26 20:25:15 +00:00
m-holger
902fd6df71 Change Pl_TIFFPredictor::cur_row to std::vector<unsigned char> 2024-01-26 20:20:16 +00:00
Jay Berkenbilt
4660e23262
Merge pull request #1128 from m-holger/reconstruct
Tighten checks for invalid indirect references  during xref reconstru…
2024-01-20 12:43:07 -05:00
m-holger
b6a2b5d3c1 Handle default-constructed JSON objects 2024-01-18 10:06:43 +00:00
m-holger
f0343565ed Tighten checks for invalid indirect references during xref reconstruction 2024-01-17 14:11:57 +00:00
m-holger
ed43691bf3 Tighten checks for invalid indirect references in QPDFParser 2024-01-17 13:15:13 +00:00
m-holger
6e3b7982db Fix incorrect handling of invalid negative object ids
Fix two errors introduced in #1110 and #1112. Since
#1110, encountering the invalid indirect reference #1110
-2147483648 n R produces an integer underflow which, if
 undetected, immediately trigger a logic error. Since
 #1112, object -1 0 R may be incorrectly identified as
 an earlier generation of itself and deleted,
 invalidating a live iterator.
2024-01-17 10:39:06 +00:00
Jay Berkenbilt
37cf128501 Remove extraneous blank lines 2024-01-15 11:07:49 -05:00
m-holger
dca5927ba0 Tweak Handlers::json_handlers
Use std::vector instead of list and move shared pointers
2024-01-15 15:18:55 +00:00
m-holger
b85a590bc5 Tweak Handlers::beginUnderOverlay and beginPages 2024-01-15 15:03:33 +00:00
m-holger
a41b789995 Add new method JSON::getDictItem 2024-01-15 15:02:52 +00:00
Jay Berkenbilt
ebb10f3256 Fix null pointer issue on array copy 2024-01-12 08:05:22 -05:00
Jay Berkenbilt
90a97bf4ef Include filename in verbose output for overlay/underlay 2024-01-11 06:13:57 -05:00
Jay Berkenbilt
5b2e543089 Honor repeated overlay/underlay 2024-01-11 06:13:57 -05:00
Jay Berkenbilt
6cf04b0a88 Allow repetition of overlay/underlay
This is just QPDFJob wiring.
2024-01-11 06:13:57 -05:00
Jay Berkenbilt
0161f62e38 QPDFJob JSON: allow single item in place of array 2024-01-11 06:13:57 -05:00
Jay Berkenbilt
7de0b3f3c0 JSONHandler: add fallback handler support 2024-01-11 06:13:57 -05:00
Jay Berkenbilt
12f7a4461b Handle pages/under/overlay JSON file in begin
...since they have to be handled before other options. It was working
because, in both cases, `file` was alphabetically before the other
keys, but this implementation gives a stronger guarantee.
2024-01-10 16:45:14 -05:00
Jay Berkenbilt
9c723aeb56 Allow --file with --overlay and --underlay 2024-01-10 16:44:46 -05:00
Jay Berkenbilt
34f013c1be Allow --file and --range with --pages
Accept --file and --range as named parameters in additional to
allowing positional arguments. This is in preparation for adding
additional flags.
2024-01-10 16:44:17 -05:00
Jay Berkenbilt
20a134826c Fix arg parsing check with --collate
The check for the number of items was in the wrong place.
2024-01-10 06:49:31 -05:00
m-holger
5e9de5cd50 Tune handling of sparse arrays in QPDF_Array
Sparse arrays are rare. Dynamically create the variables needed to manage
them only when needed.
2024-01-10 09:36:18 +00:00
m-holger
e28625144d Tweak QPDF::getCompressibleObjGens 2024-01-08 10:55:51 -05:00
Jay Berkenbilt
adb866efd3 Fix error from older gcc versions 2024-01-08 10:55:51 -05:00
m-holger
8715d6a693 Tweak QPDF::replaceObject 2024-01-08 11:54:33 +00:00
m-holger
5641832e54 Tweak QPDF::read_xref 2024-01-08 11:43:57 +00:00
Jay Berkenbilt
07f6c635a9 Bug fix: treat old generations of reused objects as null 2024-01-07 17:16:14 -05:00
Jay Berkenbilt
df61f3a6c6 Improve getCompressibleObjGens fix to handle gen > 0 2024-01-07 15:22:04 -05:00
m-holger
ba477e0b33 Tune QPDF::getCompressibleObjGens
Change set visited to std::vector<bool>
2024-01-07 17:39:40 +00:00
m-holger
6195499598 Tune QPDF::getCompressibleObjGens
Swap front and back, and change queue from list to vector
2024-01-07 16:39:03 +00:00
Jay Berkenbilt
55b0024899 Format code 2024-01-06 17:23:45 -05:00
Jay Berkenbilt
e50ff67d00 Remove explicit type from PageLabel dictionary
The old code didn't put one there, and it's not really useful. It just
makes the file (trivially) larger.
2024-01-06 17:20:55 -05:00
Jay Berkenbilt
7b3fff15a9 QPDF.cc: remove unused includes 2024-01-06 17:19:16 -05:00
Jay Berkenbilt
2994f9cf4c Attempt to find xref streams during recovery (fixes #1103) 2024-01-06 16:51:03 -05:00
Jay Berkenbilt
7cac433e2d Implement --set-page-labels and supporting API (fixes #939) 2024-01-05 17:12:12 -05:00
Jay Berkenbilt
08e3050d5f Automated changes for --set-page-labels
This commit contains the changes from generate_auto_job based on
manual changes from the previous commit.
2024-01-05 17:10:45 -05:00
Jay Berkenbilt
a0e70b370a Wiring for --set-page-labels: manual (non-bisectable commit)
This commit contains only the manual changes. It is separated for
clarity. This commit would not pass CI because it lacks the automated
changes, which appear in the next commit.
2024-01-05 17:10:32 -05:00
Jay Berkenbilt
bfc5fc51f2 Remove unused argument in private setWriterOptions method 2024-01-04 07:31:00 -05:00
Jay Berkenbilt
d8d70ecca2 Support comma-separated numeric values with --collate (fixes #505) 2024-01-01 18:57:32 -05:00
Jay Berkenbilt
9db5d75b2b Update copyright to 2024 2024-01-01 10:56:06 -05:00
Jay Berkenbilt
070ee710eb Support excluding values from numeric ranges (fixes #564, #790) 2024-01-01 10:48:14 -05:00
Jay Berkenbilt
708ea4ef43 Completely rewrite QUtil::parse_numrange 2024-01-01 10:32:33 -05:00
Jay Berkenbilt
78a7193fe2 Preserve annotations that inherently lack appearance (fixes #1039)
...when flattening annotations. This includes /Link, /Popup,
and /Projection.
2023-12-29 13:40:08 -05:00
Jay Berkenbilt
1ad6451e8c Fix comment formatting and update notes 2023-12-29 13:16:01 -05:00
Jay Berkenbilt
a3b939ce58 Tweak utf8 checks 2023-12-27 10:48:54 -05:00
Jay Berkenbilt
6d4115b7c5 Detect overlong UTF-8 strings 2023-12-25 11:17:17 -05:00
Jay Berkenbilt
4ca185fd96 Remove --disable-signatures; incorporate into --remove-restrictions
Rather than adding yet another flag that is almost never useful on its
own, just have --remove-restrictions disable digital signatures. The
operations are still separate in the API.
2023-12-24 07:36:07 -05:00
Jay Berkenbilt
6b8aa1db6f Spell check 2023-12-23 10:00:03 -05:00
Jay Berkenbilt
909a0b3f3a Implement --disable-signatures (fixes #1015) 2023-12-23 08:50:42 -05:00
Jay Berkenbilt
3d33a3a1e3 Add QPDFAcroFormDocumentHelper::disableDigitalSignatures 2023-12-23 08:44:47 -05:00
Jay Berkenbilt
7c0fdf8510 Format code, bump clang-format version to 18 2023-12-22 21:45:10 -05:00
Jay Berkenbilt
c0c7cef16c Generate a UNIX man page (fixes #874) 2023-12-22 21:22:34 -05:00
Jay Berkenbilt
1f45686843 Handle --encrypt -- without crashing 2023-12-22 20:10:21 -05:00
Jay Berkenbilt
7d7e2234a5 Implement new --encrypt args and completion (fixes #784)
Positional arguments are supported in a backward-compatible way, but
completion no longer guides users to it.
2023-12-22 20:10:18 -05:00
Jay Berkenbilt
1173a0bdfc Add --user-password, --owner-password, --bits to --encrypt
Add the command-line arguments. They don't do anything yet.
2023-12-22 18:13:05 -05:00
Jay Berkenbilt
17703a8dcd Remove unused includes 2023-12-22 17:30:28 -05:00
Jay Berkenbilt
86ea2012bd Allow other than /Yes and /Off in a check box (fixes #1056) 2023-12-22 14:42:16 -05:00
Jay Berkenbilt
b670565abc Convert scientific notation in JSON to fixed point (fixes #1079)
JSON accepts scientific notation, but PDF doesn't.
2023-12-21 17:56:30 -05:00
Jay Berkenbilt
4400ce84ee Add "n:/pdf-name" to qpdf JSON for binary names (fixes #1072) 2023-12-21 17:43:29 -05:00
Jay Berkenbilt
bb12a7ff8d Tweak comment in QPDFParser refactor 2023-12-21 15:45:34 -05:00
Jay Berkenbilt
b8fd18ae56 Merge branch 'parse_ref' into work 2023-12-21 15:43:50 -05:00
Jay Berkenbilt
d61612a2e5 Bug fix: don't compress hint streams when --compress-streams=n 2023-12-20 15:46:20 -05:00
Jay Berkenbilt
c5f622a09e Bug fix: don't compress object/xref streams with --compress-streams=n 2023-12-20 15:46:20 -05:00
Jay Berkenbilt
290742b069
Merge pull request #1070 from m-holger/flate
Change default for SF_FlateLzwDecode::columns to 1
2023-12-16 11:50:17 -05:00
Jay Berkenbilt
b0b6d9f21f
Merge pull request #1067 from m-holger/pl_buff
Reduce copying of Buffer contents
2023-12-16 11:31:11 -05:00
Jay Berkenbilt
d7a364b882 Allow regular C++ functions to interoperate with the C API 2023-12-16 10:06:34 -05:00
Jay Berkenbilt
414c83f767 Install cmake files with dev component 2023-12-09 06:28:13 -05:00
m-holger
368666899f Refactor InlineImageTracker::handleToken 2023-11-26 13:08:55 +00:00
m-holger
ddad5ad53e In QPDF::pipeStreamData use unique_ptr as heap 2023-11-26 13:06:12 +00:00
m-holger
0dee397075 In QPDF::pipeStreamData read buffer in a single read 2023-11-26 12:26:57 +00:00
m-holger
9f7f9496ed Add Buffer constructors taking std::string parameters 2023-11-26 12:26:44 +00:00
m-holger
4c71c8680a Refactor QPDF_Stream::getStreamJSON 2023-11-26 12:22:36 +00:00
m-holger
9146f1f0fd Change default for SF_FlateLzwDecode::columns to 1 2023-11-23 01:51:38 +00:00
m-holger
3237ef70fb Add new method Pl_Buffer::getString 2023-11-18 16:34:17 +00:00
m-holger
d11622b6fd Change Pl_Buffer to use std::string for storage 2023-11-17 15:55:11 +00:00
m-holger
1285f9767a Add new method QPDFParser::fixMissingKeys 2023-11-03 11:22:21 +00:00
m-holger
605b1429e8 In QPDFParser::parse create dictionaries on the fly
Also, don't search for /Contents name unless the result is used.
2023-11-03 11:09:58 +00:00
m-holger
0328d87237 In QPDFParser::parse refactor parsing of indirect references 2023-11-03 01:34:16 +00:00
m-holger
1548b8d8be In QPDFParser::parseRemainder eliminate most temporary variables 2023-11-03 01:34:10 +00:00
m-holger
4c8836d520 In QPDFParser::parse eliminate most temporary variables 2023-11-03 01:33:59 +00:00
m-holger
c912af7384 In QPDFParser remove state st_top 2023-11-03 01:32:04 +00:00
m-holger
172cc61305 Remove redundant code in QPDFParser::parse and parseRemainder
Also, fix test cases.
2023-11-03 01:26:34 +00:00
m-holger
5a1bf035f9 Add new method QPDFParser::parseRemainder
The new method is temporarily an (almost) complete copy of parse, which is
temporarily (almost) unchanged.
2023-11-03 01:26:12 +00:00
m-holger
db6ab9cbfa In QPDFParser::parse merge state and object stacks 2023-11-01 15:45:17 +00:00
m-holger
d904eab84c In QPDFParser::parse refactor handling of array_open and dict_open tokens 2023-11-01 15:38:01 +00:00
m-holger
90829228b8 In QPDFParser::parse refactor handling of dict_close tokens 2023-11-01 15:27:52 +00:00
m-holger
12837f14b6 In QPDFParser::parse refactor handling of array_close tokens 2023-11-01 15:26:04 +00:00
m-holger
26e0bf4610 In QPDFParser::parse refactor eof handling 2023-11-01 15:23:30 +00:00
m-holger
37f7a73488 In QPDFParser::parse refactor handling of bad tokens 2023-11-01 15:21:08 +00:00
m-holger
29cd8f4f53 Avoid unnecessary string copies in QPDFParser::parse
Fixes #864. QPDFTokenizer::getValue originally had a std::string_view
return type, which was changed to std::string without removing some
unnecessary string creation.
2023-10-27 14:16:51 +01:00
Jay Berkenbilt
71566a2761 Write offsets as unsigned in linearization hint tables (fixes #1023) 2023-10-14 18:04:13 -04:00
Jay Berkenbilt
1ecc6bb29e Don't lose character after \d or \dd parsing string (fixes #1050) 2023-10-14 17:12:56 -04:00
Jay Berkenbilt
8854143c7b Spell check 2023-10-07 17:52:35 -04:00
Jay Berkenbilt
98014ec98a Fix error with stream recovery (fixes #1042) 2023-10-07 13:29:10 -04:00
m-holger
fb504ce913 Fix #1028 2023-09-05 17:22:34 +01:00
Jay Berkenbilt
bfbd97b938 Spell check 2023-09-03 14:07:30 -04:00
Jay Berkenbilt
806922f643 ascii85: ignore whitespace between ~ and > (fixes #973) 2023-09-03 13:56:34 -04:00
Jay Berkenbilt
3372615e5b Quote program name in completion output (fixes #1021) 2023-09-03 10:13:17 -04:00
Jay Berkenbilt
87765bace9 Move random number device check to runtime (fixes #1022)
Having it at compile time breaks cross-compilation and isn't really
right anyway.
2023-09-03 09:36:13 -04:00
Jay Berkenbilt
2b4dcb33aa
Merge pull request #1014 from m-holger/i1011
Change QPDF::copyForeignObject to return a null object when called wi…
2023-09-03 08:54:12 -04:00
m-holger
b0c3ea2bb6 Refactor test for /Pages object in QPDF::copyForeignObject
Test for missing object before accessing obj_copier.object_map.
2023-09-03 13:41:11 +01:00
Jay Berkenbilt
fec75b44b4
Merge pull request #1030 from m-holger/exit
Fix exit code when an input other than the primary input generates wa…
2023-09-03 08:37:14 -04:00
Jay Berkenbilt
c6a3d83fb5 Revert "Check for warnings in files used by --pages"
m-holger's fix is better

This reverts commit fa3cdaf1b4.
2023-09-03 08:12:31 -04:00
Jay Berkenbilt
fa3cdaf1b4 Check for warnings in files used by --pages 2023-09-03 08:07:07 -04:00
Jay Berkenbilt
dedf9a06df Fix a few things found by CLion 2023-09-03 08:07:07 -04:00
m-holger
94e6323206 Fix exit code when an input other than the primary input generates warnings 2023-09-03 12:27:23 +01:00
Jay Berkenbilt
fb704143cd
Merge pull request #1013 from m-holger/po
Simplify QPDFObjectHandle::isPageObject
2023-09-02 15:37:06 -04:00
Jay Berkenbilt
e640dd30be
Merge pull request #1016 from m-holger/i1010
Change QUtil::read_file_into_string to work with pipes (fixes #1010)
2023-09-02 15:21:04 -04:00
Jay Berkenbilt
c51bdeb19c
Merge pull request #1017 from m-holger/mbox
Check for missing mediaboxes
2023-09-02 15:03:03 -04:00
Jay Berkenbilt
ec6784411d
Merge pull request #1028 from m-holger/i1003
Maintain links to foreign pages when copying foreign objects (fixes #1003)
2023-09-02 14:59:16 -04:00
m-holger
ac32dbc313 Reserve foreign /Page objects in QPDF::copyForeignObject
Ensure that links to foreign pages are not broken provided that the page is
subsequently copied.
2023-08-25 14:06:42 +01:00
m-holger
ad73bbcd90 Change QPDF::reserveObjects to reserve indirect nulls to reserve foreign objects 2023-08-25 13:30:55 +01:00
m-holger
52539544c4 Modify QPDF::replaceReserved to allow replacing indirect nulls 2023-08-25 12:37:24 +01:00
m-holger
6574dc5c03 Store indirect nulls in QPDF_Dictionary 2023-08-25 12:25:06 +01:00
m-holger
34491c612d Store indirect nulls in QPDF_Dictionary 2023-08-25 12:21:25 +01:00
m-holger
fedd42191f Change QPDF::copyForeignObject to return a null object when called with a /Pages object (fixes #1011) 2023-08-25 12:10:51 +01:00
Zoe Clifford
cbae2f916b Remove use of non-standard char_traits<unsigned char> from Pl_Buffer
`basic_string<unsigned char>` implies use of
`char_traits<unsigned char>`.

This char_traits specialization is not standard C++, and will be
removed from LibC++ as of LLVM 18. To ensure continued LibC++
compatibility it needs to be removed.

There are two possible replacements here: `std::string` (e.g.
`std::basic_string<char>`), or `std::vector<unsigned char>`.

I have opted for vector since this code is dealing with a binary
buffer; though probably either way is fine (why does C++ even have
strings anyway??).

https://github.com/qpdf/qpdf/issues/1024
2023-08-22 13:44:58 -07:00
m-holger
d7efc661ec Change QUtil::read_file_into_string to work with pipes (fixes #1010) 2023-08-07 12:40:34 +01:00
m-holger
9a69cbba5b Check for missing mediaboxes 2023-07-29 13:16:40 +01:00
m-holger
b683e65cca Simplify QPDFObjectHandle::isPageObject 2023-07-25 12:43:19 +01:00
m-holger
d531309cf9 Fix QPDFObjectHandle::disconnect (partially fixes #1011) 2023-07-24 18:51:30 +01:00
Jay Berkenbilt
3f9b5053ba Format code 2023-07-09 09:59:55 -04:00
m-holger
ba3953f1bf Tune QPDF::readObject 2023-07-08 16:32:07 +01:00
m-holger
5754ab8b39 Tune QPDF::readObjectInStream 2023-07-08 16:32:00 +01:00
m-holger
aabd3f6f9b Add private method QPDF::validateStreamLineEnd 2023-07-08 16:31:57 +01:00