chunk: Skip all leading zero bytes in chunk_skip_zero() not just the first
authorTobias Brunner <tobias@strongswan.org>
Mon, 4 Apr 2016 13:29:16 +0000 (15:29 +0200)
committerTobias Brunner <tobias@strongswan.org>
Mon, 4 Apr 2016 13:39:42 +0000 (15:39 +0200)
src/libstrongswan/tests/suites/test_chunk.c
src/libstrongswan/utils/chunk.h

index 7e5310c..b82b143 100644 (file)
@@ -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
 
index 403c7f8..160d099 100644 (file)
@@ -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--;