diff options
Diffstat (limited to 'src/util/support/t_k5buf.c')
-rw-r--r-- | src/util/support/t_k5buf.c | 208 |
1 files changed, 109 insertions, 99 deletions
diff --git a/src/util/support/t_k5buf.c b/src/util/support/t_k5buf.c index a6195fcecb..5e660d40fe 100644 --- a/src/util/support/t_k5buf.c +++ b/src/util/support/t_k5buf.c @@ -28,7 +28,8 @@ #include <stdio.h> #include <stdlib.h> -static void fail_if(int condition, const char *name) +static void +fail_if(int condition, const char *name) { if (condition) { fprintf(stderr, "%s failed\n", name); @@ -37,7 +38,8 @@ static void fail_if(int condition, const char *name) } /* Test the invariants of a buffer. */ -static void check_buf(struct k5buf *buf, const char *name) +static void +check_buf(struct k5buf *buf, const char *name) { fail_if(buf->buftype != BUFTYPE_FIXED && buf->buftype != BUFTYPE_DYNAMIC && buf->buftype != BUFTYPE_ERROR, name); @@ -49,31 +51,33 @@ static void check_buf(struct k5buf *buf, const char *name) fail_if(buf->data[buf->len] != 0, name); } -static void test_basic() +static void +test_basic() { struct k5buf buf; char storage[1024], *s; ssize_t len; - krb5int_buf_init_fixed(&buf, storage, sizeof(storage)); - krb5int_buf_add(&buf, "Hello "); - krb5int_buf_add_len(&buf, "world", 5); + k5_buf_init_fixed(&buf, storage, sizeof(storage)); + k5_buf_add(&buf, "Hello "); + k5_buf_add_len(&buf, "world", 5); check_buf(&buf, "basic fixed"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || strcmp(s, "Hello world") != 0 || len != 11, "basic fixed"); - krb5int_buf_init_dynamic(&buf); - krb5int_buf_add_len(&buf, "Hello", 5); - krb5int_buf_add(&buf, " world"); + k5_buf_init_dynamic(&buf); + k5_buf_add_len(&buf, "Hello", 5); + k5_buf_add(&buf, " world"); check_buf(&buf, "basic dynamic"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || strcmp(s, "Hello world") != 0 || len != 11, "basic dynamic"); - krb5int_free_buf(&buf); + k5_free_buf(&buf); } -static void test_realloc() +static void +test_realloc() { struct k5buf buf; char data[1024], *s; @@ -84,151 +88,156 @@ static void test_realloc() data[i] = 'a'; /* Cause the buffer size to double from 128 to 256 bytes. */ - krb5int_buf_init_dynamic(&buf); - krb5int_buf_add_len(&buf, data, 10); - krb5int_buf_add_len(&buf, data, 128); + k5_buf_init_dynamic(&buf); + k5_buf_add_len(&buf, data, 10); + k5_buf_add_len(&buf, data, 128); fail_if(buf.space != 256, "realloc 1"); check_buf(&buf, "realloc 1"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || len != 138 || memcmp(s, data, len) != 0, "realloc 1"); /* Cause the same buffer to double in size to 512 bytes. */ - krb5int_buf_add_len(&buf, data, 128); + k5_buf_add_len(&buf, data, 128); fail_if(buf.space != 512, "realloc 2"); check_buf(&buf, "realloc 2"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || len != 266 || memcmp(s, data, len) != 0, "realloc 2"); - krb5int_free_buf(&buf); + k5_free_buf(&buf); /* Cause a buffer to increase from 128 to 512 bytes directly. */ - krb5int_buf_init_dynamic(&buf); - krb5int_buf_add_len(&buf, data, 10); - krb5int_buf_add_len(&buf, data, 256); + k5_buf_init_dynamic(&buf); + k5_buf_add_len(&buf, data, 10); + k5_buf_add_len(&buf, data, 256); fail_if(buf.space != 512, "realloc 3"); check_buf(&buf, "realloc 3"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || len != 266 || memcmp(s, data, len) != 0, "realloc 3"); - krb5int_free_buf(&buf); + k5_free_buf(&buf); /* Cause a buffer to increase from 128 to 1024 bytes directly. */ - krb5int_buf_init_dynamic(&buf); - krb5int_buf_add_len(&buf, data, 10); - krb5int_buf_add_len(&buf, data, 512); + k5_buf_init_dynamic(&buf); + k5_buf_add_len(&buf, data, 10); + k5_buf_add_len(&buf, data, 512); fail_if(buf.space != 1024, "realloc 4"); check_buf(&buf, "realloc 4"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || len != 522 || memcmp(s, data, len) != 0, "realloc 4"); - krb5int_free_buf(&buf); + k5_free_buf(&buf); /* Cause a reallocation to fail by exceeding SPACE_MAX. */ - krb5int_buf_init_dynamic(&buf); - krb5int_buf_add_len(&buf, data, 10); - krb5int_buf_add_len(&buf, NULL, SPACE_MAX); + k5_buf_init_dynamic(&buf); + k5_buf_add_len(&buf, data, 10); + k5_buf_add_len(&buf, NULL, SPACE_MAX); check_buf(&buf, "realloc 5"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(buf.buftype != BUFTYPE_ERROR || s != NULL || len != -1, "realloc 5"); - krb5int_free_buf(&buf); + k5_free_buf(&buf); /* Cause a reallocation to fail by integer overflow. */ - krb5int_buf_init_dynamic(&buf); - krb5int_buf_add_len(&buf, data, 100); - krb5int_buf_add_len(&buf, NULL, SPACE_MAX * 2); + k5_buf_init_dynamic(&buf); + k5_buf_add_len(&buf, data, 100); + k5_buf_add_len(&buf, NULL, SPACE_MAX * 2); check_buf(&buf, "realloc 6"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(buf.buftype != BUFTYPE_ERROR || s != NULL || len != -1, "realloc 6"); - krb5int_free_buf(&buf); + k5_free_buf(&buf); } -static void test_overflow() +static void +test_overflow() { struct k5buf buf; char storage[10], *s; ssize_t len; /* Cause a fixed-sized buffer overflow. */ - krb5int_buf_init_fixed(&buf, storage, sizeof(storage)); - krb5int_buf_add(&buf, "12345"); - krb5int_buf_add(&buf, "12345"); + k5_buf_init_fixed(&buf, storage, sizeof(storage)); + k5_buf_add(&buf, "12345"); + k5_buf_add(&buf, "12345"); check_buf(&buf, "overflow 1"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(buf.buftype != BUFTYPE_ERROR || s != NULL || len != -1, "overflow 1"); /* Cause a fixed-sized buffer overflow with integer overflow. */ - krb5int_buf_init_fixed(&buf, storage, sizeof(storage)); - krb5int_buf_add(&buf, "12345"); - krb5int_buf_add_len(&buf, NULL, SPACE_MAX * 2); + k5_buf_init_fixed(&buf, storage, sizeof(storage)); + k5_buf_add(&buf, "12345"); + k5_buf_add_len(&buf, NULL, SPACE_MAX * 2); check_buf(&buf, "overflow 2"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(buf.buftype != BUFTYPE_ERROR || s != NULL || len != -1, "overflow 2"); } -static void test_error() +static void +test_error() { struct k5buf buf; char storage[1]; /* Cause an overflow and then perform actions afterwards. */ - krb5int_buf_init_fixed(&buf, storage, sizeof(storage)); - krb5int_buf_add(&buf, "1"); + k5_buf_init_fixed(&buf, storage, sizeof(storage)); + k5_buf_add(&buf, "1"); fail_if(buf.buftype != BUFTYPE_ERROR, "error"); check_buf(&buf, "error"); - krb5int_buf_add(&buf, "test"); + k5_buf_add(&buf, "test"); check_buf(&buf, "error"); - krb5int_buf_add_len(&buf, "test", 4); + k5_buf_add_len(&buf, "test", 4); check_buf(&buf, "error"); - krb5int_buf_truncate(&buf, 3); + k5_buf_truncate(&buf, 3); check_buf(&buf, "error"); fail_if(buf.buftype != BUFTYPE_ERROR, "error"); } -static void test_truncate() +static void +test_truncate() { struct k5buf buf; char *s; ssize_t len; - krb5int_buf_init_dynamic(&buf); - krb5int_buf_add(&buf, "abcde"); - krb5int_buf_add(&buf, "fghij"); - krb5int_buf_truncate(&buf, 7); + k5_buf_init_dynamic(&buf); + k5_buf_add(&buf, "abcde"); + k5_buf_add(&buf, "fghij"); + k5_buf_truncate(&buf, 7); check_buf(&buf, "truncate"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || len != 7 || strcmp(s, "abcdefg") != 0, "truncate"); - krb5int_free_buf(&buf); + k5_free_buf(&buf); } -static void test_binary() +static void +test_binary() { struct k5buf buf; char *s, data[] = { 'a', 0, 'b' }; ssize_t len; - krb5int_buf_init_dynamic(&buf); - krb5int_buf_add_len(&buf, data, 3); - krb5int_buf_add_len(&buf, data, 3); + k5_buf_init_dynamic(&buf); + k5_buf_add_len(&buf, data, 3); + k5_buf_add_len(&buf, data, 3); check_buf(&buf, "binary"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || len != 6, "binary"); fail_if(s[0] != 'a' || s[1] != 0 || s[2] != 'b', "binary"); fail_if(s[3] != 'a' || s[4] != 0 || s[5] != 'b', "binary"); - krb5int_free_buf(&buf); + k5_free_buf(&buf); } -static void test_fmt() +static void +test_fmt() { struct k5buf buf; char *s, storage[10], data[1024]; @@ -240,41 +249,42 @@ static void test_fmt() data[i] = '\0'; /* Format some text into a non-empty fixed buffer. */ - krb5int_buf_init_fixed(&buf, storage, sizeof(storage)); - krb5int_buf_add(&buf, "foo"); - krb5int_buf_add_fmt(&buf, " %d ", 3); + k5_buf_init_fixed(&buf, storage, sizeof(storage)); + k5_buf_add(&buf, "foo"); + k5_buf_add_fmt(&buf, " %d ", 3); check_buf(&buf, "fmt 1"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || len != 6 || strcmp(s, "foo 3 ") != 0, "fmt 1"); /* Overflow the same buffer with formatted text. */ - krb5int_buf_add_fmt(&buf, "%d%d%d%d", 1, 2, 3, 4); + k5_buf_add_fmt(&buf, "%d%d%d%d", 1, 2, 3, 4); check_buf(&buf, "fmt 2"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(buf.buftype != BUFTYPE_ERROR || s != NULL || len != -1, "fmt 2"); /* Format some text into a non-empty dynamic buffer. */ - krb5int_buf_init_dynamic(&buf); - krb5int_buf_add(&buf, "foo"); - krb5int_buf_add_fmt(&buf, " %d ", 3); + k5_buf_init_dynamic(&buf); + k5_buf_add(&buf, "foo"); + k5_buf_add_fmt(&buf, " %d ", 3); check_buf(&buf, "fmt 3"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || len != 6 || strcmp(s, "foo 3 ") != 0, "fmt 3"); /* Format more text into the same buffer, causing a big resize. */ - krb5int_buf_add_fmt(&buf, "%s", data); + k5_buf_add_fmt(&buf, "%s", data); check_buf(&buf, "fmt 4"); fail_if(buf.space != 2048, "fmt 4"); - s = krb5int_buf_data(&buf); - len = krb5int_buf_len(&buf); + s = k5_buf_data(&buf); + len = k5_buf_len(&buf); fail_if(!s || len != 1029 || strcmp(s + 6, data) != 0, "fmt 4"); - krb5int_free_buf(&buf); + k5_free_buf(&buf); } -int main() +int +main() { test_basic(); test_realloc(); |