cosmos 3.4.0 → 3.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/crc.txt +1 -1
- data/ext/cosmos/ext/structure/structure.c +11 -4
- data/lib/cosmos/version.rb +4 -4
- data/spec/packets/binary_accessor_spec.rb +116 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 347fbd93cb872161d7b92e30d62926f518dd70c8
|
4
|
+
data.tar.gz: 135bbd4fd436113705cd4be89618e104112ac085
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc8d30c9cda59b6f5fe8d29452ff72608aef066ce43304fd4b81b2694cda72c507dac9dcd3af451012850982ae57ba0d9e9bb4f2a368e5072b5b8a7da60cb770
|
7
|
+
data.tar.gz: 4c672f1f98fb0bda3da853f1b619465e8c7891796c7df99af4ebd1b6fa7db5220b63831de2c06233af3185cfc270547ad2831676b179d27e110a12e70600e6c8
|
data/data/crc.txt
CHANGED
@@ -234,7 +234,7 @@
|
|
234
234
|
"lib/cosmos/tools/tlm_viewer/tlm_viewer.rb" 0x1D2090F6
|
235
235
|
"lib/cosmos/system.rb" 0x735DFB42
|
236
236
|
"lib/cosmos/conversions.rb" 0x43679D05
|
237
|
-
"lib/cosmos/version.rb"
|
237
|
+
"lib/cosmos/version.rb" 0x23E689C5
|
238
238
|
"lib/cosmos/core_ext.rb" 0x1951B346
|
239
239
|
"lib/cosmos/interfaces.rb" 0x7E3EA326
|
240
240
|
"lib/cosmos/processors.rb" 0x5241327D
|
@@ -875,7 +875,8 @@ static VALUE binary_accessor_write(VALUE self, VALUE value, VALUE param_bit_offs
|
|
875
875
|
bit_size = RSTRING_LEN(value) * 8;
|
876
876
|
}
|
877
877
|
|
878
|
-
if ((!check_bounds_and_buffer_size(bit_offset, bit_size, buffer_length, param_endianness, param_data_type, &lower_bound, &upper_bound)) && (given_bit_size > 0))
|
878
|
+
if ((!check_bounds_and_buffer_size(bit_offset, bit_size, buffer_length, param_endianness, param_data_type, &lower_bound, &upper_bound)) && (given_bit_size > 0))
|
879
|
+
{
|
879
880
|
rb_funcall(self, id_method_raise_buffer_error, 5, symbol_write, param_buffer, param_data_type, param_bit_offset, param_bit_size);
|
880
881
|
}
|
881
882
|
|
@@ -902,25 +903,31 @@ static VALUE binary_accessor_write(VALUE self, VALUE value, VALUE param_bit_offs
|
|
902
903
|
if (given_bit_size <= 0) {
|
903
904
|
end_bytes = -(given_bit_size / 8);
|
904
905
|
old_upper_bound = buffer_length - 1 - end_bytes;
|
906
|
+
/* Lower bound + end_bytes can never be more than 1 byte outside of the given buffer */
|
907
|
+
if ((lower_bound + end_bytes) > buffer_length)
|
908
|
+
{
|
909
|
+
rb_funcall(self, id_method_raise_buffer_error, 5, symbol_write, param_buffer, param_data_type, param_bit_offset, param_bit_size);
|
910
|
+
}
|
911
|
+
|
905
912
|
if (old_upper_bound < lower_bound) {
|
906
913
|
/* String was completely empty */
|
907
914
|
if (end_bytes > 0) {
|
908
915
|
/* Preserve bytes at end of buffer */
|
909
916
|
rb_str_concat(param_buffer, rb_str_times(ZERO_STRING, INT2FIX(value_length)));
|
910
917
|
buffer = (unsigned char*) RSTRING_PTR(param_buffer);
|
911
|
-
memmove((buffer + lower_bound + value_length), (buffer + lower_bound),
|
918
|
+
memmove((buffer + lower_bound + value_length), (buffer + lower_bound), end_bytes);
|
912
919
|
}
|
913
920
|
} else if (bit_size == 0) {
|
914
921
|
/* Remove entire string */
|
915
922
|
rb_str_update(param_buffer, lower_bound, old_upper_bound - lower_bound + 1, rb_str_new2(""));
|
916
923
|
} else if (upper_bound < old_upper_bound) {
|
917
924
|
/* Remove extra bytes from old string */
|
918
|
-
rb_str_update(param_buffer, upper_bound + 1, old_upper_bound
|
925
|
+
rb_str_update(param_buffer, upper_bound + 1, old_upper_bound - upper_bound, rb_str_new2(""));
|
919
926
|
} else if ((upper_bound > old_upper_bound) && (end_bytes > 0)) {
|
920
927
|
/* Preserve bytes at end of buffer */
|
921
928
|
rb_str_concat(param_buffer, rb_str_times(ZERO_STRING, INT2FIX(upper_bound - old_upper_bound)));
|
922
929
|
buffer = (unsigned char*) RSTRING_PTR(param_buffer);
|
923
|
-
memmove((buffer + upper_bound + 1), (buffer + old_upper_bound + 1),
|
930
|
+
memmove((buffer + upper_bound + 1), (buffer + old_upper_bound + 1), end_bytes);
|
924
931
|
}
|
925
932
|
} else {
|
926
933
|
byte_size = bit_size / 8;
|
data/lib/cosmos/version.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# encoding: ascii-8bit
|
2
2
|
|
3
|
-
COSMOS_VERSION = '3.4.
|
3
|
+
COSMOS_VERSION = '3.4.1'
|
4
4
|
module Cosmos
|
5
5
|
module Version
|
6
6
|
MAJOR = '3'
|
7
7
|
MINOR = '4'
|
8
|
-
PATCH = '
|
9
|
-
BUILD = '
|
8
|
+
PATCH = '1'
|
9
|
+
BUILD = '2ce089801e159a76caad0b207042e289c6ab3367'
|
10
10
|
end
|
11
|
-
VERSION = '3.4.
|
11
|
+
VERSION = '3.4.1'
|
12
12
|
end
|
@@ -787,6 +787,122 @@ module Cosmos
|
|
787
787
|
end
|
788
788
|
end
|
789
789
|
|
790
|
+
context "when negative bit size" do
|
791
|
+
it "writes a block to an empty buffer" do
|
792
|
+
data = ''
|
793
|
+
512.times do |index|
|
794
|
+
data << [index].pack("n")
|
795
|
+
end
|
796
|
+
buffer = ""
|
797
|
+
expect { BinaryAccessor.write(data, 0, -16, :BLOCK, buffer, :BIG_ENDIAN, :ERROR) }.to raise_error(ArgumentError, "0 byte buffer insufficient to write BLOCK at bit_offset 0 with bit_size -16")
|
798
|
+
end
|
799
|
+
|
800
|
+
it "handles a huge bit offset with small buffer" do
|
801
|
+
data = ''
|
802
|
+
512.times do |index|
|
803
|
+
data << [index].pack("n")
|
804
|
+
end
|
805
|
+
buffer = ""
|
806
|
+
expect { BinaryAccessor.write(data, 1024, 0, :BLOCK, buffer, :BIG_ENDIAN, :ERROR) }.to raise_error(ArgumentError, "0 byte buffer insufficient to write BLOCK at bit_offset 1024 with bit_size 0")
|
807
|
+
end
|
808
|
+
|
809
|
+
it "handles an edge case bit offset" do
|
810
|
+
data = ''
|
811
|
+
512.times do |index|
|
812
|
+
data << [index].pack("n")
|
813
|
+
end
|
814
|
+
buffer = "\x00" * 127
|
815
|
+
expect { BinaryAccessor.write(data, 1024, 0, :BLOCK, buffer, :BIG_ENDIAN, :ERROR) }.to raise_error(ArgumentError, "127 byte buffer insufficient to write BLOCK at bit_offset 1024 with bit_size 0")
|
816
|
+
end
|
817
|
+
|
818
|
+
it "writes a block to a small buffer preserving the end" do
|
819
|
+
data = ''
|
820
|
+
512.times do |index|
|
821
|
+
data << [index].pack("n")
|
822
|
+
end
|
823
|
+
preserve = [0xBEEF].pack("n")
|
824
|
+
buffer = preserve.clone # Should preserve this
|
825
|
+
BinaryAccessor.write(data, 0, -16, :BLOCK, buffer, :BIG_ENDIAN, :ERROR)
|
826
|
+
expect(buffer[0..-3]).to eql data
|
827
|
+
expect(buffer[-2..-1]).to eql preserve
|
828
|
+
data = BinaryAccessor.read(0, data.length*8 + 16, :BLOCK, buffer, :BIG_ENDIAN)
|
829
|
+
expect(data).to eql buffer
|
830
|
+
end
|
831
|
+
|
832
|
+
it "writes a block to another small buffer preserving the end" do
|
833
|
+
data = ''
|
834
|
+
512.times do |index|
|
835
|
+
data << [index].pack("n")
|
836
|
+
end
|
837
|
+
preserve = [0xBEEF0123].pack("N")
|
838
|
+
buffer = "\x00\x01" + preserve.clone # Should preserve this
|
839
|
+
BinaryAccessor.write(data, 16, -32, :BLOCK, buffer, :BIG_ENDIAN, :ERROR)
|
840
|
+
expect(buffer[0..1]).to eql "\x00\x01"
|
841
|
+
expect(buffer[2..-5]).to eql data
|
842
|
+
expect(buffer[-4..-1]).to eql preserve
|
843
|
+
data = BinaryAccessor.read(0, 16 + data.length*8 + 32, :BLOCK, buffer, :BIG_ENDIAN)
|
844
|
+
expect(data).to eql buffer
|
845
|
+
end
|
846
|
+
|
847
|
+
it "writes a block to a small buffer overwriting the end" do
|
848
|
+
data = ''
|
849
|
+
512.times do |index|
|
850
|
+
data << [index].pack("n")
|
851
|
+
end
|
852
|
+
preserve = [0xBEEF].pack("n")
|
853
|
+
buffer = [0xDEAD].pack("n") # Should write over this
|
854
|
+
buffer << preserve.clone # Should preserve this
|
855
|
+
BinaryAccessor.write(data, 0, -16, :BLOCK, buffer, :BIG_ENDIAN, :ERROR)
|
856
|
+
expect(buffer[0..-3]).to eql data
|
857
|
+
expect(buffer[-2..-1]).to eql preserve
|
858
|
+
data = BinaryAccessor.read(0, data.length*8 + 16, :BLOCK, buffer, :BIG_ENDIAN)
|
859
|
+
expect(data).to eql buffer
|
860
|
+
end
|
861
|
+
|
862
|
+
it "writes a smaller block in the middle of a buffer" do
|
863
|
+
data = ''
|
864
|
+
buffer = ''
|
865
|
+
256.times do |index|
|
866
|
+
data << [index].pack("n")
|
867
|
+
end
|
868
|
+
512.times do
|
869
|
+
buffer << [0xDEAD].pack("n")
|
870
|
+
end
|
871
|
+
expected = buffer.clone
|
872
|
+
BinaryAccessor.write(data, 128*8, -128*8, :BLOCK, buffer, :BIG_ENDIAN, :ERROR)
|
873
|
+
expect(buffer.length).to eql (128 + 512 + 128)
|
874
|
+
expect(buffer[0...128]).to eql expected[0...128]
|
875
|
+
expect(buffer[128...-128]).to eql data
|
876
|
+
expect(buffer[-128..-1]).to eql expected[0...128]
|
877
|
+
end
|
878
|
+
|
879
|
+
it "writes a larger block in the middle of a buffer" do
|
880
|
+
data = ''
|
881
|
+
buffer = ''
|
882
|
+
256.times do |index|
|
883
|
+
data << [index].pack("n")
|
884
|
+
end
|
885
|
+
512.times do
|
886
|
+
buffer << [0xDEAD].pack("n")
|
887
|
+
end
|
888
|
+
expected = buffer.clone
|
889
|
+
BinaryAccessor.write(data, 384*8, -384*8, :BLOCK, buffer, :BIG_ENDIAN, :ERROR)
|
890
|
+
expect(buffer.length).to eql (384 + 512 + 384)
|
891
|
+
expect(buffer[0...384]).to eql expected[0...384]
|
892
|
+
expect(buffer[384...-384]).to eql data
|
893
|
+
expect(buffer[-384..-1]).to eql expected[0...384]
|
894
|
+
end
|
895
|
+
|
896
|
+
it "complains when the negative index exceeds the buffer length" do
|
897
|
+
data = "\x01"
|
898
|
+
buffer = ''
|
899
|
+
16.times do
|
900
|
+
buffer << [0xDEAD].pack("n")
|
901
|
+
end
|
902
|
+
expect { BinaryAccessor.write(data, 0, -2024*8, :BLOCK, buffer, :BIG_ENDIAN, :ERROR) }.to raise_error(ArgumentError, "32 byte buffer insufficient to write BLOCK at bit_offset 0 with bit_size -16192")
|
903
|
+
end
|
904
|
+
end
|
905
|
+
|
790
906
|
it "writes blocks with negative bit_offsets" do
|
791
907
|
BinaryAccessor.write(@baseline_data[0..1], -16, 16, :BLOCK, @data, :BIG_ENDIAN, :ERROR)
|
792
908
|
expect(@data[-2..-1]).to eql(@baseline_data[0..1])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cosmos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.4.
|
4
|
+
version: 3.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Melton
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|