cddl 0.7.0 → 0.7.1

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