cddl 0.7.0 → 0.7.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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/cddl.gemspec +1 -1
  3. data/lib/cddl.rb +17 -3
  4. data/test/test-cddl.rb +18 -0
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea47a90f675f5589227fb3a10db240bddaae6c8e
4
- data.tar.gz: 04f10cc045bbc451c244e2d6de26e8a1c0a64cf9
3
+ metadata.gz: 21c72ccd0f94ea94c2c5759a86d7f96d6756d945
4
+ data.tar.gz: a84cecf4ca71d4c1dd284a996b072e20a8139c7e
5
5
  SHA512:
6
- metadata.gz: 7d1bda5f7bf502ba4dbb0d11ff1ac40ee249892a086e95c0c00dc4f4928e2384b6a8b26a2940c6ea7e7b342af06ec8aa5320d61ea019bce101945b287910bb8b
7
- data.tar.gz: 7f69f714dcc39eb85474df6823a48b7a67b8dfdbc5fcfdb8b459ba7798a411e66673de622a690486dfe85ad6feb88ea9188ab4966b3d5b3a028982c1f97d9f75
6
+ metadata.gz: 0ca79dda50938e7a502ed7f5722a396eca9a55d37fd652b0944e8a031e0919ca9275c4d80433bac651a9845d7b1c1e62886f553eab9a9548732a4d48f05e9a0e
7
+ data.tar.gz: af8f5d8945bd7e731004d86d23ac3ac0c036b304ed4f57982a798460be51135e496662a43823179f74c047accd18c8abeb2b83e4c01d6458ce75052dabe437dd
data/cddl.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'cddl'
3
- s.version = '0.7.0'
3
+ s.version = '0.7.1'
4
4
  s.summary = "CDDL generator and validator."
5
5
  s.description = %{A parser, generator, and validator for CDDL}
6
6
  s.add_dependency('cbor-diag')
data/lib/cddl.rb CHANGED
@@ -383,10 +383,16 @@ module CDDL
383
383
  case where[1]
384
384
  when :size
385
385
  should_be_int = generate1(control)
386
- unless target == [:prim, 2] && Integer === should_be_int
386
+ unless (target == [:prim, 2] || target == [:prim, 0]) && Integer === should_be_int && should_be_int >= 0
387
387
  fail "Don't know yet how to generate #{where}"
388
388
  end
389
- Random.new.bytes(should_be_int)
389
+ s = Random.new.bytes(should_be_int)
390
+ if target == [:prim, 0]
391
+ # silently restrict to what we can put into a uint
392
+ s[0...8].bytes.inject(0) {|a, b| a << 8 | b }
393
+ else
394
+ s
395
+ end
390
396
  when :bits
391
397
  set_of_bits = Array.new(10) { generate1(control) } # XXX: ten?
392
398
  # p set_of_bits
@@ -679,7 +685,15 @@ module CDDL
679
685
  control = where[3]
680
686
  case where[1]
681
687
  when :size
682
- ann if validate1(d.bytesize, control)
688
+ case d
689
+ when Integer
690
+ ok, v, vt = extract_value(control)
691
+ if ok && vt == Integer
692
+ ann if (d >> (8*v)) == 0
693
+ end
694
+ when String
695
+ ann if validate1(d.bytesize, control)
696
+ end
683
697
  when :bits
684
698
  if String === d
685
699
  d.each_byte.with_index.all? { |b, i|
data/test/test-cddl.rb CHANGED
@@ -855,6 +855,24 @@ HERE
855
855
  assert parser.validate(gen)
856
856
  end
857
857
 
858
+
859
+ def test_uint_size_annotation
860
+ parser = CDDL::Parser.new <<HERE
861
+ test = uint .size 3
862
+ HERE
863
+ pp parser.rules
864
+ 10.times do
865
+ gen = parser.generate
866
+ assert Integer === gen
867
+ assert gen < 2**24
868
+ assert gen >= 0
869
+ assert parser.validate(gen)
870
+ end
871
+ refute parser.validate(-1, false)
872
+ refute parser.validate(2**24, false)
873
+ refute parser.validate(2**218, false)
874
+ end
875
+
858
876
  def test_bits_annotation
859
877
  parser = CDDL::Parser.new <<HERE
860
878
  test = bstr .bits (1 / 3 / 5)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cddl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carsten Bormann