aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2024-02-10 20:26:40 +0100
committerm-holger <m-holger@kubitscheck.org>2024-02-16 11:54:08 +0100
commit9379b768118f465e94f826bed1daacbbc94938fc (patch)
tree42ed7da5ad3743eb46f6b1781364b246f9139470
parentd28969bf375d75ff7c1b911d84708727510a7a8a (diff)
downloadqpdf-9379b768118f465e94f826bed1daacbbc94938fc.tar.zst
Add additional name token JSON tests
Also, test writing JSON v1 files and files with deeply nested containers.
-rw-r--r--qpdf/qtest/qpdf-json.test10
-rw-r--r--qpdf/qtest/qpdf/weird-tokens-alt.json136
-rw-r--r--qpdf/qtest/qpdf/weird-tokens-v1.json295
-rw-r--r--qpdf/qtest/qpdf/weird-tokens.json136
-rw-r--r--qpdf/qtest/qpdf/weird-tokens.pdf148
5 files changed, 715 insertions, 10 deletions
diff --git a/qpdf/qtest/qpdf-json.test b/qpdf/qtest/qpdf-json.test
index 9542bccf..defabbe7 100644
--- a/qpdf/qtest/qpdf-json.test
+++ b/qpdf/qtest/qpdf-json.test
@@ -350,7 +350,7 @@ $td->runtest("check C API write to JSON stream",
# (using #xx) would generate invalid JSON, even though qpdf's own JSON
# parser would accept it. Also, the JSON spec allows real numbers in
# scientific notation, but the PDF spec does not.
-$n_tests += 4;
+$n_tests += 6;
$td->runtest("handle binary names",
{$td->COMMAND =>
"qpdf --json-output weird-tokens.pdf a.json"},
@@ -371,6 +371,14 @@ $td->runtest("weird tokens with scientific notation",
"qpdf --json-input --json-output weird-tokens-alt.json -"},
{$td->FILE => "weird-tokens.json", $td->EXIT_STATUS => 0},
$td->NORMALIZE_NEWLINES);
+$td->runtest("handle binary names (JSON v1)",
+ {$td->COMMAND =>
+ "qpdf --json=1 weird-tokens.pdf a.json"},
+ {$td->STRING => "", $td->EXIT_STATUS => 0});
+$td->runtest("check json",
+ {$td->FILE => "a.json"},
+ {$td->FILE => "weird-tokens-v1.json"},
+ $td->NORMALIZE_NEWLINES);
cleanup();
$td->report($n_tests);
diff --git a/qpdf/qtest/qpdf/weird-tokens-alt.json b/qpdf/qtest/qpdf/weird-tokens-alt.json
index 607bdd55..7fbff908 100644
--- a/qpdf/qtest/qpdf/weird-tokens-alt.json
+++ b/qpdf/qtest/qpdf/weird-tokens-alt.json
@@ -10,21 +10,155 @@
{
"obj:1 0 R": {
"value": {
+ "/Escape\\Key": 42,
"/Extra": [
"u:Names with binary data",
"n:/ABCDEF+#ba#da#cc#e5",
"n:/OVERLONG+#c0#81",
+ "n:/OVERLONG+#c1#ff",
+ "/Ok+€",
"n:/OVERLONG+#e0#81#82",
+ "n:/OVERLONG+#e0#9f#ff",
+ "/Ok+ࠀ",
"n:/OVERLONG+#f0#81#82#83",
+ "n:/OVERLONG+#f0#8f#ff#ff",
+ "/Ok+𐀀",
"n:/range+#01",
"n:/low+#18",
"/ABCEDEF+π",
"n:/one+#a0two",
"n:/text#2fplain",
+ "u:Names requiring escaping in JSON",
+ "/Back\\shlash",
+ "/Low\u0022",
+ "/Low\u001f",
+ "/ExceptSpace ",
+ "/Except!",
"u:Very small/large reals",
1e-05,
1e12
],
+ "/Nested": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": 42
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/Pages": "2 0 R",
"/Type": "/Catalog",
"n:/WeirdKey+#ba#da#cc#e5": 42
@@ -78,7 +212,7 @@
"value": {
"/ID": [
"b:42841c13bbf709d79a200fa1691836f8",
- "b:728c020f464c3cf7e02c12605fa7d88b"
+ "b:31415926535897932384626433832795"
],
"/Root": "1 0 R",
"/Size": 7
diff --git a/qpdf/qtest/qpdf/weird-tokens-v1.json b/qpdf/qtest/qpdf/weird-tokens-v1.json
new file mode 100644
index 00000000..8b8c194c
--- /dev/null
+++ b/qpdf/qtest/qpdf/weird-tokens-v1.json
@@ -0,0 +1,295 @@
+{
+ "version": 1,
+ "parameters": {
+ "decodelevel": "generalized"
+ },
+ "pages": [
+ {
+ "contents": [
+ "4 0 R"
+ ],
+ "images": [],
+ "label": null,
+ "object": "3 0 R",
+ "outlines": [],
+ "pageposfrom1": 1
+ }
+ ],
+ "pagelabels": [],
+ "acroform": {
+ "fields": [],
+ "hasacroform": false,
+ "needappearances": false
+ },
+ "attachments": {},
+ "encrypt": {
+ "capabilities": {
+ "accessibility": true,
+ "extract": true,
+ "moddifyannotations": true,
+ "modify": true,
+ "modifyassembly": true,
+ "modifyforms": true,
+ "modifyother": true,
+ "printhigh": true,
+ "printlow": true
+ },
+ "encrypted": false,
+ "ownerpasswordmatched": false,
+ "parameters": {
+ "P": 0,
+ "R": 0,
+ "V": 0,
+ "bits": 0,
+ "filemethod": "none",
+ "key": null,
+ "method": "none",
+ "streammethod": "none",
+ "stringmethod": "none"
+ },
+ "recovereduserpassword": null,
+ "userpasswordmatched": false
+ },
+ "outlines": [],
+ "objects": {
+ "1 0 R": {
+ "/Escape\\Key": 42,
+ "/Extra": [
+ "Names with binary data",
+ "/ABCDEF+#ba#da#cc#e5",
+ "/OVERLONG+#c0#81",
+ "/OVERLONG+#c1#ff",
+ "/Ok+#c2#80",
+ "/OVERLONG+#e0#81#82",
+ "/OVERLONG+#e0#9f#ff",
+ "/Ok+#e0#a0#80",
+ "/OVERLONG+#f0#81#82#83",
+ "/OVERLONG+#f0#8f#ff#ff",
+ "/Ok+#f0#90#80#80",
+ "/range+#01",
+ "/low+#18",
+ "/ABCEDEF+#cf#80",
+ "/one+#a0two",
+ "/text#2fplain",
+ "Names requiring escaping in JSON",
+ "/Back\\shlash",
+ "/Low\"",
+ "/Low#1f",
+ "/ExceptSpace#20",
+ "/Except!",
+ "Very small/large reals",
+ 0.00001,
+ 1000000000000
+ ],
+ "/Nested": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": 42
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/Pages": "2 0 R",
+ "/Type": "/Catalog",
+ "/WeirdKey+#ba#da#cc#e5": 42
+ },
+ "2 0 R": {
+ "/Count": 1,
+ "/Kids": [
+ "3 0 R"
+ ],
+ "/Type": "/Pages"
+ },
+ "3 0 R": {
+ "/Contents": "4 0 R",
+ "/MediaBox": [
+ 0,
+ 0,
+ 612,
+ 792
+ ],
+ "/Parent": "2 0 R",
+ "/Resources": {
+ "/Font": {
+ "/F1": "6 0 R"
+ }
+ },
+ "/Type": "/Page"
+ },
+ "4 0 R": {
+ "/Length": "5 0 R"
+ },
+ "5 0 R": 44,
+ "6 0 R": {
+ "/BaseFont": "/Helvetica",
+ "/Encoding": "/WinAnsiEncoding",
+ "/Subtype": "/Type1",
+ "/Type": "/Font"
+ },
+ "trailer": {
+ "/ID": [
+ "B—˝\u0013»÷\t×ı \u000f¡i˘6ø",
+ "1AY&SXŠfi#—bd3…'Ł"
+ ],
+ "/Root": "1 0 R",
+ "/Size": 7
+ }
+ },
+ "objectinfo": {
+ "1 0 R": {
+ "stream": {
+ "filter": null,
+ "is": false,
+ "length": null
+ }
+ },
+ "2 0 R": {
+ "stream": {
+ "filter": null,
+ "is": false,
+ "length": null
+ }
+ },
+ "3 0 R": {
+ "stream": {
+ "filter": null,
+ "is": false,
+ "length": null
+ }
+ },
+ "4 0 R": {
+ "stream": {
+ "filter": null,
+ "is": true,
+ "length": 44
+ }
+ },
+ "5 0 R": {
+ "stream": {
+ "filter": null,
+ "is": false,
+ "length": null
+ }
+ },
+ "6 0 R": {
+ "stream": {
+ "filter": null,
+ "is": false,
+ "length": null
+ }
+ }
+ }
+}
diff --git a/qpdf/qtest/qpdf/weird-tokens.json b/qpdf/qtest/qpdf/weird-tokens.json
index 6aca6a5a..4ad926e7 100644
--- a/qpdf/qtest/qpdf/weird-tokens.json
+++ b/qpdf/qtest/qpdf/weird-tokens.json
@@ -10,21 +10,155 @@
{
"obj:1 0 R": {
"value": {
+ "/Escape\\Key": 42,
"/Extra": [
"u:Names with binary data",
"n:/ABCDEF+#ba#da#cc#e5",
"n:/OVERLONG+#c0#81",
+ "n:/OVERLONG+#c1#ff",
+ "/Ok+€",
"n:/OVERLONG+#e0#81#82",
+ "n:/OVERLONG+#e0#9f#ff",
+ "/Ok+ࠀ",
"n:/OVERLONG+#f0#81#82#83",
+ "n:/OVERLONG+#f0#8f#ff#ff",
+ "/Ok+𐀀",
"/range+\u0001",
"/low+\u0018",
"/ABCEDEF+π",
"n:/one+#a0two",
"/text/plain",
+ "u:Names requiring escaping in JSON",
+ "/Back\\shlash",
+ "/Low\"",
+ "/Low\u001f",
+ "/ExceptSpace ",
+ "/Except!",
"u:Very small/large reals",
0.00001,
1000000000000
],
+ "/Nested": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": {
+ "/1": {
+ "/2": {
+ "/3": {
+ "/4": {
+ "/5": {
+ "/6": {
+ "/7": {
+ "/8": {
+ "/9": {
+ "/10": 42
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/Pages": "2 0 R",
"/Type": "/Catalog",
"n:/WeirdKey+#ba#da#cc#e5": 42
@@ -78,7 +212,7 @@
"value": {
"/ID": [
"b:42841c13bbf709d79a200fa1691836f8",
- "b:728c020f464c3cf7e02c12605fa7d88b"
+ "b:31415926535897932384626433832795"
],
"/Root": "1 0 R",
"/Size": 7
diff --git a/qpdf/qtest/qpdf/weird-tokens.pdf b/qpdf/qtest/qpdf/weird-tokens.pdf
index 27415a46..c49a046f 100644
--- a/qpdf/qtest/qpdf/weird-tokens.pdf
+++ b/qpdf/qtest/qpdf/weird-tokens.pdf
@@ -4,21 +4,155 @@
1 0 obj
<<
+ /Escape\Key 42
/Extra [
(Names with binary data)
/ABCDEF+#ba#da#cc#e5
/OVERLONG+#c0#81
+ /OVERLONG+#c1#ff
+ /Ok+#c2#80
/OVERLONG+#e0#81#82
+ /OVERLONG+#e0#9f#ff
+ /Ok+#e0#a0#80
/OVERLONG+#f0#81#82#83
+ /OVERLONG+#f0#8f#ff#ff
+ /Ok+#f0#90#80#80
/range+#01
/low+#18
/ABCEDEF+#cf#80
/one+#a0two
/text#2fplain
+ (Names requiring escaping in JSON)
+ /Back\shlash
+ /Low"
+ /Low#1f
+ /ExceptSpace#20
+ /Except!
(Very small/large reals)
0.00001
1000000000000
]
+ /Nested <<
+ /1 <<
+ /2 <<
+ /3 <<
+ /4 <<
+ /5 <<
+ /6 <<
+ /7 <<
+ /8 <<
+ /9 <<
+ /10 <<
+ /1 <<
+ /2 <<
+ /3 <<
+ /4 <<
+ /5 <<
+ /6 <<
+ /7 <<
+ /8 <<
+ /9 <<
+ /10 <<
+ /1 <<
+ /2 <<
+ /3 <<
+ /4 <<
+ /5 <<
+ /6 <<
+ /7 <<
+ /8 <<
+ /9 <<
+ /10 <<
+ /1 <<
+ /2 <<
+ /3 <<
+ /4 <<
+ /5 <<
+ /6 <<
+ /7 <<
+ /8 <<
+ /9 <<
+ /10 <<
+ /1 <<
+ /2 <<
+ /3 <<
+ /4 <<
+ /5 <<
+ /6 <<
+ /7 <<
+ /8 <<
+ /9 <<
+ /10 <<
+ /1 <<
+ /2 <<
+ /3 <<
+ /4 <<
+ /5 <<
+ /6 <<
+ /7 <<
+ /8 <<
+ /9 <<
+ /10 42
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
+ >>
/Pages 2 0 R
/Type /Catalog
/WeirdKey+#ba#da#cc#e5 42
@@ -86,16 +220,16 @@ xref
0 7
0000000000 65535 f
0000000025 00000 n
-0000000389 00000 n
-0000000471 00000 n
-0000000667 00000 n
-0000000766 00000 n
-0000000785 00000 n
+0000008642 00000 n
+0000008724 00000 n
+0000008920 00000 n
+0000009019 00000 n
+0000009038 00000 n
trailer <<
/Root 1 0 R
/Size 7
- /ID [<42841c13bbf709d79a200fa1691836f8><728c020f464c3cf7e02c12605fa7d88b>]
+ /ID [<42841c13bbf709d79a200fa1691836f8><31415926535897932384626433832795>]
>>
startxref
-891
+9144
%%EOF