hexapdf 0.17.2 → 0.17.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71e5d38f8a3d1a6b4371e5f8e2f991d36c0ea8c01ca5dc4ec1e132043fad00aa
4
- data.tar.gz: cf78ef5b6fa915bac30fe75157fc414148c8bd2b8c5c7ee10fe4bb3cbf70076a
3
+ metadata.gz: 15efadb34e0a5dc93ec7659d02cb95a19400a38fe7ccffcbc2438fa6e6f51b8f
4
+ data.tar.gz: 29ddd43180432e648c107ae40c2618415f0ead8bf6e6fcbe46bc1f0557eae271
5
5
  SHA512:
6
- metadata.gz: 2153a1c0eadc0ca940480502b42780717e2777416f1e85e1c9506b879e01df0b2bc4e6d838ecd140af4a62e93bd16aa08ab42bbf522f6bbd234c0d9da82e4115
7
- data.tar.gz: e91b860ece2751633350739852b392719d9d09cb1bdd9e1c1896ef76e5828db9d2d0f9204b93521efbd6e5dcefc84b0451984392c2a4de3703a6060def1f5c75
6
+ metadata.gz: 0a3668dd377838665e75b6c8325efbe237e379823deb060acdf5c7be26d799ab4eee65e94a75b50e9ffc27c81693cb0158765402d9d6f4ddbacc3c1b3be531d4
7
+ data.tar.gz: 759a4a692997d50022f26fd6e5fbf06859a93a00b5d371286a084ffbcb98d3571d72eeb1d3c8d733b4b8917d195c236f7dac3654e4fddae8cb9c2cf7b2f9ab42
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.17.3 - 2021-10-31
2
+
3
+ ### Fixed
4
+
5
+ * Reconstruction of invalid PDF files where the PDF header is not at the start
6
+ of the file
7
+ * Reconstruction of invalid PDF files where the first object is invalid
8
+
9
+
1
10
  ## 0.17.2 - 2021-10-26
2
11
 
3
12
  ### Fixed
@@ -404,6 +404,7 @@ module HexaPDF
404
404
  def reconstruct_revision
405
405
  return if @in_reconstruct_revision
406
406
  @in_reconstruct_revision = true
407
+ @header_offset = 0
407
408
 
408
409
  raise unless @document.config['parser.try_xref_reconstruction']
409
410
  msg = "#{$!} - trying cross-reference table reconstruction"
@@ -428,8 +429,10 @@ module HexaPDF
428
429
  elsif gen.kind_of?(Integer) && tok.kind_of?(Tokenizer::Token) && tok == 'obj'
429
430
  xref.add_in_use_entry(token, gen, pos)
430
431
  if linearized.nil?
432
+ pos = @tokenizer.pos
431
433
  obj = @tokenizer.next_object rescue nil
432
434
  linearized = obj.kind_of?(Hash) && obj.key?(:Linearized)
435
+ @tokenizer.pos = pos
433
436
  end
434
437
  @tokenizer.scan_until(/(?:\n|\r\n?)endobj\b/)
435
438
  end
@@ -37,6 +37,6 @@
37
37
  module HexaPDF
38
38
 
39
39
  # The version of HexaPDF.
40
- VERSION = '0.17.2'
40
+ VERSION = '0.17.3'
41
41
 
42
42
  end
@@ -135,12 +135,12 @@ describe HexaPDF::DictionaryFields do
135
135
  end
136
136
 
137
137
  def configuration
138
- {'document.on_invalid_string' => proc {|str| str }}
138
+ HexaPDF::Configuration.with_defaults
139
139
  end
140
140
 
141
141
  it "calls document.on_invalid_string if the provided string is invalid" do
142
142
  str = "\xfe\xff\xD8\x00\x00s\x00t".b
143
- assert_equal("\xD8\x00\x00s\x00t".force_encoding("UTF-16BE"), @field.convert(str, self))
143
+ assert_equal("st", @field.convert(str, self))
144
144
  end
145
145
  end
146
146
 
@@ -607,11 +607,22 @@ describe HexaPDF::Parser do
607
607
  assert_equal(4, @parser.load_object(@xref).value)
608
608
  end
609
609
 
610
+ it "handles an invalid object as first object" do
611
+ create_parser("2 0 obj\n(a(b\nendobj\n1 0 obj\n6\nendobj #)(\ntrailer\n<</Size 1>>")
612
+ assert_equal(6, @parser.load_object(@xref).value)
613
+ end
614
+
610
615
  it "ignores invalid lines" do
611
616
  create_parser("1 0 obj\n5\nendobj\nhello there\n1 0 obj\n6\nendobj\ntrailer\n<</Size 1>>")
612
617
  assert_equal(6, @parser.load_object(@xref).value)
613
618
  end
614
619
 
620
+ it "resets the header offset" do
621
+ create_parser("1 0 obj\n5\nendobj\ntrailer\n<</Size 1>>")
622
+ @parser.instance_variable_set(:@header_offset, 5)
623
+ assert_equal(5, @parser.load_object(@xref).value)
624
+ end
625
+
615
626
  it "uses the last trailer" do
616
627
  create_parser("trailer <</Size 1>>\ntrailer <</Size 2/Prev 342>>")
617
628
  assert_equal({Size: 2}, @parser.reconstructed_revision.trailer.value)
@@ -40,7 +40,7 @@ describe HexaPDF::Writer do
40
40
  219
41
41
  %%EOF
42
42
  3 0 obj
43
- <</Producer(HexaPDF version 0.17.2)>>
43
+ <</Producer(HexaPDF version 0.17.3)>>
44
44
  endobj
45
45
  xref
46
46
  3 1
@@ -72,7 +72,7 @@ describe HexaPDF::Writer do
72
72
  141
73
73
  %%EOF
74
74
  6 0 obj
75
- <</Producer(HexaPDF version 0.17.2)>>
75
+ <</Producer(HexaPDF version 0.17.3)>>
76
76
  endobj
77
77
  2 0 obj
78
78
  <</Length 10>>stream
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hexapdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.2
4
+ version: 0.17.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Leitner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-26 00:00:00.000000000 Z
11
+ date: 2021-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmdparse