grizzly_ber 1.0.7 → 1.1.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
- SHA1:
3
- metadata.gz: f7ae8c4643321026428536cfc08fed20ce944673
4
- data.tar.gz: f0acebc235b93408dcb1623e2f848f73a0eb5b2d
2
+ SHA256:
3
+ metadata.gz: 363bdd214a4f6ab85f7555590b98e79fecba9ee871ac0f14240f4925fb0a6049
4
+ data.tar.gz: 771e82bdcaed2d527870712c784a20c181dcbb27f18771e931e85acf50b679bd
5
5
  SHA512:
6
- metadata.gz: fcd71e845da7713695b9f22d23a76c7779ca85ffed32ae6b150ffe02b875b406c909b8ca8af52f58d6b406fb5a4068a9b4806da92f0a2df0b4f41868eb62b5b5
7
- data.tar.gz: 1af7fa7e474446f1ab06732a6a1d7abef9d4776425b379b5ce2e328a969d43ccfd15fdd7c81be1c99cba1879970223951a44658eb350706e442572516df64772
6
+ metadata.gz: 4caed519208405e3ff3a4c00351ebb1427e32181d2bb4a7ff48cc991011d2b94320c313b1afa9bd2881a6a246e0496f62d26f39b7f41c6f4b9059fc5814d8eb9
7
+ data.tar.gz: 13cb98e5a5f75ea43a501183487daacc87bb4e30447bcd6c4a712a077d24531dd4effc99e35dc09349629cc57b1d3bace67ef5e7cd6a30b9d84925394f64bed3
data/lib/grizzly_ber.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'grizzly_tag'
2
4
 
3
5
  class GrizzlyBerElement
@@ -5,7 +7,7 @@ class GrizzlyBerElement
5
7
 
6
8
  def initialize(byte_array = [])
7
9
  raise ArgumentError, "byte_array must be of type Array" unless byte_array.is_a?(Array)
8
- @tag = "" # is an uppercase hex string
10
+ @tag = +"" # is an uppercase hex string
9
11
  @value = nil # is a byte array if this is a data element or a GrizzlyBer if it's a sequence element
10
12
  decode_value decode_length decode_tag byte_array
11
13
  end
@@ -60,7 +62,6 @@ class GrizzlyBerElement
60
62
  end
61
63
 
62
64
  def decode_tag(byte_array)
63
- byte_array.shift while byte_array.size > 0 and (byte_array[0] == 0x00 or byte_array[0] == 0xFF)
64
65
  return [] if byte_array.size < 1
65
66
 
66
67
  first_byte = byte_array.shift
@@ -104,9 +105,13 @@ end
104
105
  class GrizzlyBer
105
106
  include Enumerable
106
107
 
107
- def initialize(hex_string = "")
108
+ class ParsingError < StandardError
109
+ end
110
+
111
+ def initialize(hex_string = "", allow_FF_tags: false)
108
112
  raise ArgumentError, "hex_string must be a valid hex string" unless hex_string.is_a? String and hex_string.size.even? and hex_string =~ /^[0-9A-F]*$/
109
113
  @elements = [] # is an array of GrizzlyBerElement
114
+ @allow_FF_tags = allow_FF_tags
110
115
  from_ber_hex_string(hex_string)
111
116
  end
112
117
 
@@ -117,11 +122,14 @@ class GrizzlyBer
117
122
 
118
123
  def from_ber(byte_array)
119
124
  raise ArgumentError, "byte_array must be an array of bytes" unless byte_array.is_a? Array and byte_array.all? {|byte| byte.is_a? Integer and byte <= 0xFF}
120
- while byte_array.size > 0
125
+ while byte_array.any?
126
+ byte_array.shift while byte_array.any? && is_erasure_byte(byte_array[0])
127
+ break if byte_array.empty?
121
128
  element = GrizzlyBerElement.new(byte_array)
122
- break if element.tag.nil? or element.value.nil?
129
+ raise ParsingError if element.tag.nil? or element.value.nil?
123
130
  @elements << element
124
131
  end
132
+ raise ParsingError if byte_array.any?
125
133
  self
126
134
  end
127
135
 
@@ -201,5 +209,8 @@ class GrizzlyBer
201
209
 
202
210
  private
203
211
 
212
+ def is_erasure_byte(byte)
213
+ byte == 0x00 || (!@allow_FF_tags && byte == 0xFF)
214
+ end
204
215
 
205
216
  end
data/lib/grizzly_tag.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GrizzlyTag
2
4
  def self.new_tag(params)
3
5
  params[:format] ||= :binary
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grizzly_ber
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Balsdon
@@ -18,27 +18,29 @@ extra_rdoc_files: []
18
18
  files:
19
19
  - lib/grizzly_ber.rb
20
20
  - lib/grizzly_tag.rb
21
- homepage: ''
21
+ homepage: https://github.com/Shopify/grizzly_ber
22
22
  licenses:
23
23
  - MIT
24
- metadata: {}
24
+ metadata:
25
+ allowed_push_host: https://rubygems.org
26
+ homepage_uri: https://github.com/Shopify/grizzly_ber
27
+ source_code_uri: https://github.com/Shopify/grizzly_ber
25
28
  post_install_message:
26
29
  rdoc_options: []
27
30
  require_paths:
28
31
  - lib
29
32
  required_ruby_version: !ruby/object:Gem::Requirement
30
33
  requirements:
31
- - - '>='
34
+ - - ">="
32
35
  - !ruby/object:Gem::Version
33
36
  version: '0'
34
37
  required_rubygems_version: !ruby/object:Gem::Requirement
35
38
  requirements:
36
- - - '>='
39
+ - - ">="
37
40
  - !ruby/object:Gem::Version
38
41
  version: '0'
39
42
  requirements: []
40
- rubyforge_project:
41
- rubygems_version: 2.0.14
43
+ rubygems_version: 3.5.7
42
44
  signing_key:
43
45
  specification_version: 4
44
46
  summary: Fiercest TLV-BER parser