This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
fixeria gerrit-no-reply at lists.osmocom.orgfixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/17220 ) Change subject: tests/bitvec: add a unit test for bitvec_read_field() ...................................................................... tests/bitvec: add a unit test for bitvec_read_field() The aim of this unit test is to demonstrate the problem described in OS#4388: bitvec_read_field() can never return negative value on error (e.g. out of bounds access). Change-Id: I340ab5799fa53d5345edb02f3e2a3655527705c0 Related: OS#4388 --- M tests/bitvec/bitvec_test.c M tests/bitvec/bitvec_test.ok 2 files changed, 60 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/20/17220/1 diff --git a/tests/bitvec/bitvec_test.c b/tests/bitvec/bitvec_test.c index fbf5c5d..b4764e6 100644 --- a/tests/bitvec/bitvec_test.c +++ b/tests/bitvec/bitvec_test.c @@ -222,6 +222,45 @@ } } +static void test_bitvec_read_field(void) +{ + uint8_t data[8] = { 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xeb, 0xda, 0xed }; + struct bitvec bv = { + .data_len = sizeof(data), + .data = data, + .cur_bit = 0, + }; + + unsigned int readIndex; + uint64_t field; + +#define _bitvec_read_field(idx, len) \ + readIndex = idx; \ + field = bitvec_read_field(&bv, &readIndex, len); \ + printf("bitvec_read_field(idx=%u, len=%u) => %" PRIx64 "\n", idx, len, field); + + _bitvec_read_field(0, 64); + _bitvec_read_field(0, 32); + _bitvec_read_field(0, 16); + _bitvec_read_field(0, 8); + _bitvec_read_field(0, 0); + + _bitvec_read_field(8, 8); + _bitvec_read_field(8, 4); + _bitvec_read_field(8, 0); + + _bitvec_read_field(10, 9); + _bitvec_read_field(10, 7); + _bitvec_read_field(10, 5); + _bitvec_read_field(10, 3); + _bitvec_read_field(10, 1); + + /* Out of bounds (see OS#4388) */ + _bitvec_read_field(8 * 8 * 8, 16); /* index too far */ + _bitvec_read_field(0, 8 * 8 + 1); /* too many bits */ + _bitvec_read_field(8 * 8, 16); /* 16 bits past */ +} + int main(int argc, char **argv) { struct bitvec bv; @@ -331,6 +370,9 @@ test_used_bytes(); test_tailroom(); + printf("\ntest bitvec_read_field():\n"); + test_bitvec_read_field(); + printf("\nbitvec ok.\n"); return 0; } diff --git a/tests/bitvec/bitvec_test.ok b/tests/bitvec/bitvec_test.ok index fa8143c..b118502 100644 --- a/tests/bitvec/bitvec_test.ok +++ b/tests/bitvec/bitvec_test.ok @@ -170,4 +170,22 @@ bitvec bytes used. +test bitvec_read_field(): +bitvec_read_field(idx=0, len=64) => deadbeeffeebdaed +bitvec_read_field(idx=0, len=32) => deadbeef +bitvec_read_field(idx=0, len=16) => dead +bitvec_read_field(idx=0, len=8) => de +bitvec_read_field(idx=0, len=0) => 0 +bitvec_read_field(idx=8, len=8) => ad +bitvec_read_field(idx=8, len=4) => a +bitvec_read_field(idx=8, len=0) => 0 +bitvec_read_field(idx=10, len=9) => 16d +bitvec_read_field(idx=10, len=7) => 5b +bitvec_read_field(idx=10, len=5) => 16 +bitvec_read_field(idx=10, len=3) => 5 +bitvec_read_field(idx=10, len=1) => 1 +bitvec_read_field(idx=512, len=16) => ffffffffffffffea +bitvec_read_field(idx=0, len=65) => ffffffffffffffea +bitvec_read_field(idx=64, len=16) => ffffffffffffffea + bitvec ok. -- To view, visit https://gerrit.osmocom.org/c/libosmocore/+/17220 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Change-Id: I340ab5799fa53d5345edb02f3e2a3655527705c0 Gerrit-Change-Number: 17220 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <axilirator at gmail.com> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200218/0d1b4961/attachment.htm>