From d3047158be95f12727d8f83bd2440d7da18665a8 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Fri, 1 Feb 2008 21:53:01 +0000 Subject: [PATCH] more unit tests for bounds-checking on incomplete bencoded data --- libtransmission/bencode-test.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/libtransmission/bencode-test.c b/libtransmission/bencode-test.c index 89581cd23..3f8d9da37 100644 --- a/libtransmission/bencode-test.c +++ b/libtransmission/bencode-test.c @@ -3,7 +3,7 @@ #include "bencode.h" #include "utils.h" /* tr_free */ -#define VERBOSE 0 +#define VERBOSE 1 int test = 0; @@ -239,6 +239,29 @@ testParse( void ) tr_free( saved ); tr_bencFree( &val ); + /* too many endings */ + end = NULL; + snprintf( (char*)buf, sizeof( buf ), "leee" ); + err = tr_bencParse( buf, buf + sizeof( buf ), &val, &end ); + check( !err ); + check( end == buf + 2 ); + saved = tr_bencSave( &val, &len ); + check( !strcmp( saved, "le" ) ); + tr_free( saved ); + tr_bencFree( &val ); + + /* no ending */ + end = NULL; + snprintf( (char*)buf, sizeof( buf ), "l1:a1:b1:c" ); + err = tr_bencParse( buf, buf + strlen( (char*)buf ), &val, &end ); + check( err ); + + /* incomplete string */ + end = NULL; + snprintf( (char*)buf, sizeof( buf ), "1:" ); + err = tr_bencParse( buf, buf + strlen( (char*)buf ), &val, &end ); + check( err ); + return 0; }