CFPropertyList 2.3.5 → 2.3.6

Sign up to get free protection for your applications and to get access to all the features.
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