CFPropertyList 2.3.5 → 2.3.6

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
  SHA1:
3
- metadata.gz: 74e0407ecce8171dfa845b93f5f55e1cd7d386a3
4
- data.tar.gz: d3d8e956ad24476ee83293c9f4d25fa23b7f2947
3
+ metadata.gz: 8ee90589694090934993f07e976e2a3b3d963b0c
4
+ data.tar.gz: 4724d0d07877da7f55cd4d1670a2f76443c5389f
5
5
  SHA512:
6
- metadata.gz: 96bc102584b4a4745bcfaa403667644fff60e8be9b2ad9224c454f6b977b236f16156863cc48d20b8aa4cffc0f9f0e4bbea5c05fc7f06450afb49cb37f4aaede
7
- data.tar.gz: 9f36e44475f5b7a48d957e54b35ed99a821c3df6ead60598c4fd8a7637bbbb1b9bfa8d5a7a438456ae814696ed52a438dbf94151cf2b29974995716c78a7189a
6
+ metadata.gz: 5897d5931e85e448f9f8899925971420085af1b78af282161c08890044003f1270080da3937674fce5dad24419dc4662803422b7de51075b419e16798b9e80f4
7
+ data.tar.gz: 94b561dd3c6b0c0ddfdbec0ea6918183c54e3cda1ca00d80ea05916dc56c3e200aeb65d76f7738782380e0ffd06a874937545ecf27c4f43d26e8baacd08d5234
@@ -123,8 +123,8 @@ module CFPropertyList
123
123
 
124
124
  # read a binary int value
125
125
  def read_binary_int(fname,fd,length)
126
- if length > 3
127
- raise CFFormatError.new("Integer greater than 8 bytes: #{length}")
126
+ if length > 4
127
+ raise CFFormatError.new("Integer greater than 16 bytes: #{length}")
128
128
  end
129
129
 
130
130
  nbytes = 1 << length
@@ -136,17 +136,12 @@ module CFPropertyList
136
136
  when 0 then buff.unpack("C")[0]
137
137
  when 1 then buff.unpack("n")[0]
138
138
  when 2 then buff.unpack("N")[0]
139
- when 3
140
- hiword,loword = buff.unpack("NN")
141
- if (hiword & 0x80000000) != 0
142
- # 8 byte integers are always signed, and are negative when bit 63 is
143
- # set. Decoding into either a Fixnum or Bignum is tricky, however,
144
- # because the size of a Fixnum varies among systems, and Ruby
145
- # doesn't consider the number to be negative, and won't sign extend.
146
- -(2**63 - ((hiword & 0x7fffffff) << 32 | loword))
147
- else
148
- hiword << 32 | loword
149
- end
139
+ # 8 byte integers are always signed
140
+ when 3 then buff.unpack("q>")[0]
141
+ # 16 byte integers are used to represent unsigned 8 byte integers
142
+ # where the unsigned value is stored in the lower 8 bytes and the
143
+ # upper 8 bytes are unused.
144
+ when 4 then buff.unpack("Q>Q>")[1]
150
145
  end
151
146
  )
152
147
  end
@@ -474,25 +469,19 @@ module CFPropertyList
474
469
 
475
470
  # Codes an integer to binary format
476
471
  def int_to_binary(value)
472
+ # Note: nbytes is actually an exponent. number of bytes = 2**nbytes.
477
473
  nbytes = 0
478
- nbytes = 1 if value > 0xFF # 1 byte integer
479
- nbytes += 1 if value > 0xFFFF # 4 byte integer
480
- nbytes += 1 if value > 0xFFFFFFFF # 8 byte integer
481
- nbytes = 3 if value < 0 # 8 byte integer, since signed
474
+ nbytes = 1 if value > 0xFF # 1 byte unsigned integer
475
+ nbytes += 1 if value > 0xFFFF # 4 byte unsigned integer
476
+ nbytes += 1 if value > 0xFFFFFFFF # 8 byte unsigned integer
477
+ nbytes += 1 if value > 0x7FFFFFFFFFFFFFFF # 8 byte unsigned integer, stored in lower half of 16 bytes
478
+ nbytes = 3 if value < 0 # signed integers always stored in 8 bytes
482
479
 
483
480
  Binary.type_bytes(0b0001, nbytes) <<
484
- if nbytes < 3
485
- [value].pack(
486
- if nbytes == 0 then "C"
487
- elsif nbytes == 1 then "n"
488
- else "N"
489
- end
490
- )
491
- else
492
- # 64 bit signed integer; we need the higher and the lower 32 bit of the value
493
- high_word = value >> 32
494
- low_word = value & 0xFFFFFFFF
495
- [high_word,low_word].pack("NN")
481
+ if nbytes < 4
482
+ [value].pack(["C", "n", "N", "q>"][nbytes])
483
+ else # nbytes == 4
484
+ [0,value].pack("Q>Q>")
496
485
  end
497
486
  end
498
487
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: CFPropertyList
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.5
4
+ version: 2.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Kruse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-27 00:00:00.000000000 Z
11
+ date: 2017-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
64
  version: '0'
65
65
  requirements: []
66
66
  rubyforge_project:
67
- rubygems_version: 2.5.1
67
+ rubygems_version: 2.6.14
68
68
  signing_key:
69
69
  specification_version: 4
70
70
  summary: Read, write and manipulate both binary and XML property lists as defined