aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2016-04-04 15:29:16 +0200
committerTobias Brunner <tobias@strongswan.org>2016-04-04 15:39:42 +0200
commitb82b5f63983eced131f8f55a9280a305962ad901 (patch)
tree9beb53c610e0094de3c421f326d354280d40853b /src
parent85597f2983c81ef1a4522020c885f1431cb6b2aa (diff)
downloadstrongswan-b82b5f63983eced131f8f55a9280a305962ad901.tar.bz2
strongswan-b82b5f63983eced131f8f55a9280a305962ad901.tar.xz
chunk: Skip all leading zero bytes in chunk_skip_zero() not just the first
Diffstat (limited to 'src')
-rw-r--r--src/libstrongswan/tests/suites/test_chunk.c28
-rw-r--r--src/libstrongswan/utils/chunk.h4
2 files changed, 18 insertions, 14 deletions
diff --git a/src/libstrongswan/tests/suites/test_chunk.c b/src/libstrongswan/tests/suites/test_chunk.c
index 7e5310c64..b82b1436f 100644
--- a/src/libstrongswan/tests/suites/test_chunk.c
+++ b/src/libstrongswan/tests/suites/test_chunk.c
@@ -316,11 +316,11 @@ START_TEST(test_chunk_skip)
foobar = chunk_from_str("foobar");
a = foobar;
a = chunk_skip(a, 0);
- ck_assert(chunk_equals(a, foobar));
+ ck_assert_chunk_eq(a, foobar);
a = chunk_skip(a, 1);
- ck_assert(chunk_equals(a, chunk_from_str("oobar")));
+ ck_assert_chunk_eq(a, chunk_from_str("oobar"));
a = chunk_skip(a, 2);
- ck_assert(chunk_equals(a, chunk_from_str("bar")));
+ ck_assert_chunk_eq(a, chunk_from_str("bar"));
a = chunk_skip(a, 3);
assert_chunk_empty(a);
@@ -338,20 +338,24 @@ START_TEST(test_chunk_skip_zero)
{
chunk_t foobar, a;
- a = chunk_empty;
- a = chunk_skip_zero(a);
+ a = chunk_skip_zero(chunk_empty);
assert_chunk_empty(a);
foobar = chunk_from_str("foobar");
- a = foobar;
- a = chunk_skip_zero(a);
- ck_assert(chunk_equals(a, foobar));
+ a = chunk_skip_zero(foobar);
+ ck_assert_chunk_eq(a, foobar);
- a = chunk_from_chars(0x00, 0xaa, 0xbb, 0xcc);
- a = chunk_skip_zero(a);
- ck_assert(chunk_equals(a, chunk_from_chars(0xaa, 0xbb, 0xcc)));
+ foobar = chunk_from_chars(0x00);
+ a = chunk_skip_zero(foobar);
+ ck_assert_chunk_eq(a, foobar);
+
+ a = chunk_skip_zero(chunk_from_chars(0x00, 0xaa, 0xbb, 0xcc));
+ ck_assert_chunk_eq(a, chunk_from_chars(0xaa, 0xbb, 0xcc));
a = chunk_skip_zero(a);
- ck_assert(chunk_equals(a, chunk_from_chars(0xaa, 0xbb, 0xcc)));
+ ck_assert_chunk_eq(a, chunk_from_chars(0xaa, 0xbb, 0xcc));
+
+ a = chunk_skip_zero(chunk_from_chars(0x00, 0x00, 0xaa, 0xbb, 0xcc));
+ ck_assert_chunk_eq(a, chunk_from_chars(0xaa, 0xbb, 0xcc));
}
END_TEST
diff --git a/src/libstrongswan/utils/chunk.h b/src/libstrongswan/utils/chunk.h
index 403c7f83b..160d09944 100644
--- a/src/libstrongswan/utils/chunk.h
+++ b/src/libstrongswan/utils/chunk.h
@@ -280,11 +280,11 @@ static inline chunk_t chunk_skip(chunk_t chunk, size_t bytes)
}
/**
- * Skip a leading zero-valued byte
+ * Skip any leading zero-valued bytes
*/
static inline chunk_t chunk_skip_zero(chunk_t chunk)
{
- if (chunk.len > 1 && *chunk.ptr == 0x00)
+ while (chunk.len > 1 && *chunk.ptr == 0x00)
{
chunk.ptr++;
chunk.len--;