hexapdf 0.15.0 → 0.15.1

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: bcd3bc77b70872416b1377b4fdf97804de083cf4d7213dfd200738fd8b2adae7
4
- data.tar.gz: 53a8a850610a744570999cf56c656d6bd65c8ab691a5658b81172111bdd44804
3
+ metadata.gz: 310d9fc74134cb2840118b3637c35a3037909d707532116680ef2fe6f42c43d3
4
+ data.tar.gz: 76f05b220e101114d4a4136d8c07520cfe35e1e532652ea4e43593a4b812284c
5
5
  SHA512:
6
- metadata.gz: 54c99dbd44c4ae146496912f295982d47bb5ca297d4d2b76475c1f3151670068cd3be0c2dedee413b0a52e493383229bbd36d819ff2db2a9c04b377731cc107e
7
- data.tar.gz: 8426e942709633b921f7a644e01b645d555cfcdecbdbd25bae03d0154cf07df3a3cd1f108adb16a8b449801c203014698a6b382133bbb63033a1d590351b61f7
6
+ metadata.gz: 6e811e637b859f3e327ece6af28174bd6602cec0585af596c9b174127ab7276752c3e519e668757933945f2906f4a6856a96e68575eb9139f32365bfa6b8a36b
7
+ data.tar.gz: 54e94c7d6704a340d1e5a5ad7b35e0715b06b6604ecec4671a079cea6049f786308258a44378280597d59e66c17e4eefd6317e94fe9a465671c2d093a7395ad3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.15.1 - 2021-04-15
2
+
3
+ ### Fixed
4
+
5
+ * Potential division by zero when calculating the scaling for XObjects
6
+ * Handling of XObjects with a width or height of zero when drawing on canvas
7
+
8
+
1
9
  ## 0.15.0 - 2021-04-12
2
10
 
3
11
  ### Added
@@ -1260,6 +1260,7 @@ module HexaPDF
1260
1260
  unless obj.kind_of?(HexaPDF::Stream)
1261
1261
  obj = context.document.images.add(obj)
1262
1262
  end
1263
+ return obj if obj.width == 0 || obj.height == 0
1263
1264
 
1264
1265
  width, height = calculate_dimensions(obj.width, obj.height,
1265
1266
  rwidth: width, rheight: height)
@@ -47,18 +47,18 @@ module HexaPDF
47
47
  #
48
48
  # +rwidth+::
49
49
  # The requested width. If +rheight+ is not specified, it is chosen so that the aspect
50
- # ratio is maintained
50
+ # ratio is maintained. In case of +width+ begin zero, +height+ is used for the height.
51
51
  #
52
52
  # +rheight+::
53
53
  # The requested height. If +rwidth+ is not specified, it is chosen so that the aspect
54
- # ratio is maintained
54
+ # ratio is maintained. In case of +height+ begin zero, +width+ is used for the width.
55
55
  def calculate_dimensions(width, height, rwidth: nil, rheight: nil)
56
56
  if rwidth && rheight
57
57
  [rwidth, rheight]
58
58
  elsif rwidth
59
- [rwidth, height * rwidth / width.to_f]
59
+ [rwidth, width == 0 ? height : height * rwidth / width.to_f]
60
60
  elsif rheight
61
- [width * rheight / height.to_f, rheight]
61
+ [height == 0 ? width : width * rheight / height.to_f, rheight]
62
62
  else
63
63
  [width, height]
64
64
  end
@@ -37,6 +37,6 @@
37
37
  module HexaPDF
38
38
 
39
39
  # The version of HexaPDF.
40
- VERSION = '0.15.0'
40
+ VERSION = '0.15.1'
41
41
 
42
42
  end
@@ -831,6 +831,17 @@ describe HexaPDF::Content::Canvas do
831
831
  [:restore_graphics_state]])
832
832
  end
833
833
 
834
+ it "doesn't do anything if the image's width or height is zero" do
835
+ @image[:Width] = 0
836
+ @canvas.xobject(@image, at: [0, 0])
837
+ assert_operators(@page.contents, [])
838
+
839
+ @image[:Width] = 10
840
+ @image[:Height] = 0
841
+ @canvas.xobject(@image, at: [0, 0])
842
+ assert_operators(@page.contents, [])
843
+ end
844
+
834
845
  it "correctly serializes the form with no options" do
835
846
  @canvas.xobject(@form, at: [1, 2])
836
847
  assert_operators(@page.contents, [[:save_graphics_state],
@@ -862,6 +873,16 @@ describe HexaPDF::Content::Canvas do
862
873
  [:paint_xobject, [:XO1]],
863
874
  [:restore_graphics_state]])
864
875
  end
876
+
877
+ it "doesn't do anything if the form's width or height is zero" do
878
+ @form[:BBox] = [100, 50, 100, 200]
879
+ @canvas.xobject(@form, at: [0, 0])
880
+ assert_operators(@page.contents, [])
881
+
882
+ @form[:BBox] = [100, 50, 150, 50]
883
+ @canvas.xobject(@form, at: [0, 0])
884
+ assert_operators(@page.contents, [])
885
+ end
865
886
  end
866
887
 
867
888
  describe "character_spacing" do
@@ -40,7 +40,7 @@ describe HexaPDF::Writer do
40
40
  219
41
41
  %%EOF
42
42
  3 0 obj
43
- <</Producer(HexaPDF version 0.15.0)>>
43
+ <</Producer(HexaPDF version 0.15.1)>>
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.15.0)>>
75
+ <</Producer(HexaPDF version 0.15.1)>>
76
76
  endobj
77
77
  2 0 obj
78
78
  <</Length 10>>stream
@@ -15,9 +15,17 @@ describe HexaPDF::Utils::GraphicsHelpers do
15
15
  assert_equal([10, 12], calculate_dimensions(5, 6, rwidth: 10))
16
16
  end
17
17
 
18
+ it "returns the requested width and the given height if width is zero" do
19
+ assert_equal([10, 6], calculate_dimensions(0, 6, rwidth: 10))
20
+ end
21
+
18
22
  it "returns the requested height and an adjusted width" do
19
23
  assert_equal([10, 12], calculate_dimensions(5, 6, rheight: 12))
20
24
  end
25
+
26
+ it "returns the requested height and the given width if height is zero" do
27
+ assert_equal([5, 12], calculate_dimensions(5, 0, rheight: 12))
28
+ end
21
29
  end
22
30
 
23
31
  describe "point_on_line" do
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.15.0
4
+ version: 0.15.1
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-04-12 00:00:00.000000000 Z
11
+ date: 2021-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmdparse