From 1a4af940b4b3af2e928b82835741be6a3649b83c Mon Sep 17 00:00:00 2001 From: Michal Vaner Date: Mon, 21 Jul 2008 21:16:42 +0200 Subject: [PATCH] Libucw: A test for fastbufs on static buffers. --- ucw/Makefile | 4 ++-- ucw/fb-buffer.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ ucw/fb-buffer.t | 13 +++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 ucw/fb-buffer.t diff --git a/ucw/Makefile b/ucw/Makefile index e1e09368..23182a52 100644 --- a/ucw/Makefile +++ b/ucw/Makefile @@ -94,7 +94,7 @@ TESTS+=$(addprefix $(o)/ucw/,regex.test unicode.test hash-test.test mempool.test slists.test kmp-test.test bbuf.test getopt.test ff-unicode.test eltpool.test \ fb-socket.test trie-test.test string.test sha1.test asort-test.test binheap-test.test \ redblack-test.test basecode.test fb-file.test fb-grow.test fb-pool.test fb-atomic.test \ - fb-limfd.test fb-temp.test fb-mem.test) + fb-limfd.test fb-temp.test fb-mem.test fb-buffer.test) $(o)/ucw/regex.test: $(o)/ucw/regex-t $(o)/ucw/unicode.test: $(o)/ucw/unicode-t @@ -116,7 +116,7 @@ $(o)/ucw/binheap-test.test: $(o)/ucw/binheap-test $(o)/ucw/redblack-test.test: $(o)/ucw/redblack-test $(o)/ucw/basecode.test: $(o)/ucw/basecode $(addprefix $(o)/ucw/fb-,file.test grow.test pool.test socket.test atomic.test \ - limfd.test temp.test mem.test): %.test: %-t + limfd.test temp.test mem.test buffer.test): %.test: %-t ifdef CONFIG_UCW_THREADS TESTS+=$(addprefix $(o)/ucw/,asio.test) diff --git a/ucw/fb-buffer.c b/ucw/fb-buffer.c index 7f03f25d..35dd6381 100644 --- a/ucw/fb-buffer.c +++ b/ucw/fb-buffer.c @@ -68,3 +68,51 @@ fbbuf_init_write(struct fastbuf *f, byte *buf, uns size) f->config = NULL; f->can_overwrite_buffer = 0; } + +#ifdef TEST + +int main(int argc, char *argv[]) +{ + if (argc < 2) + { + fprintf(stderr, "You must specify a test (r, w, o)\n"); + return 1; + } + switch (*argv[1]) + { + case 'r': + { + struct fastbuf fb; + char *data = "Two\nlines\n"; + fbbuf_init_read(&fb, data, strlen(data), 0); + char buffer[10]; + while (bgets(&fb, buffer, 10)) + puts(buffer); + bclose(&fb); + break; + } + case 'w': + { + struct fastbuf fb; + char buff[20]; + fbbuf_init_write(&fb, buff, 20); + bputs(&fb, "Hello world\n"); + bputc(&fb, '\0'); + fputs(buff, stdout); + break; + } + case 'o': + { + struct fastbuf fb; + char buff[4]; + fbbuf_init_write(&fb, buff, 4); + bputs(&fb, "Hello"); + bputc(&fb, '\0'); + fputs(buff, stdout); + break; + } + } + return 0; +} + +#endif diff --git a/ucw/fb-buffer.t b/ucw/fb-buffer.t new file mode 100644 index 00000000..38a50d73 --- /dev/null +++ b/ucw/fb-buffer.t @@ -0,0 +1,13 @@ +# Tests for fb-buffer.c + +Name: Read +Run: ../obj/ucw/fb-buffer-t r +Out: Two + lines + +Name: Write +Run: ../obj/ucw/fb-buffer-t w +Out: Hello world + +Name: Overflow +Run: ../obj/ucw/fb-buffer-t o 2>&1 | grep 'buffer overflow on write' -- 2.39.2