Change in libosmocore[master]: tests/bitvec: add a unit test for bitvec_read_field()

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.org
Tue Feb 18 22:59:13 UTC 2020


fixeria 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>


More information about the gerrit-log mailing list