Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:Test
squid-beta
10818.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 10818.patch of Package squid-beta
--------------------- PatchSet 10818 Date: 2007/05/20 08:29:44 Author: amosjeffries Branch: HEAD Tag: (none) Log: Fix 1-off bug left after strnlen bug removal. Also: * Harden memory allocations to SqString. * Added more unit tests for strings. Members: src/SqString.cc:1.5->1.6 src/SqString.h:1.2->1.3 src/tests/testString.cc:1.3->1.4 src/tests/testString.h:1.2->1.3 Index: squid3/src/SqString.cc =================================================================== RCS file: /cvsroot/squid/squid3/src/SqString.cc,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- squid3/src/SqString.cc 20 May 2007 04:22:06 -0000 1.5 +++ squid3/src/SqString.cc 20 May 2007 08:29:44 -0000 1.6 @@ -1,6 +1,6 @@ /* - * $Id: SqString.cc,v 1.5 2007/05/20 04:22:06 amosjeffries Exp $ + * $Id: SqString.cc,v 1.6 2007/05/20 08:29:44 amosjeffries Exp $ * * DEBUG: section 67 String * AUTHOR: Duane Wessels @@ -40,16 +40,19 @@ void SqString::initBuf(size_t sz) { + size_t bsz; PROF_start(StringInitBuf); clear(); - buf_ = (char *)memAllocString(sz, &sz); assert(sz < 65536); - size_ = sz; + buf_ = (char *)memAllocString(sz, &bsz); + assert(bsz < 65536); + assert(bsz >= sz); + size_ = bsz; PROF_stop(StringInitBuf); } void -SqString::limitInit(const char *str, int len) +SqString::limitInit(const char *str, unsigned int len) { PROF_start(StringLimitInit); assert(this && str); @@ -185,15 +188,16 @@ if(len < 1 || str == NULL) return; - if (len_ + len < size_) { + if ( (len_ + len +1) < size_) { operator[](len_+len) = '\0'; xmemcpy(buf_+len_, str, len); len_ += len; } else { unsigned int ssz = len_ + len; unsigned int bsz = len_ + len + 1; - char* tmp = (char *)memAllocString(ssz, &bsz); + char* tmp = (char *)memAllocString(bsz, &bsz); assert(bsz < 65536); + assert(bsz > ssz); if (buf_) xmemcpy(tmp, buf_, len_); @@ -201,7 +205,7 @@ if (len) xmemcpy(tmp + len_, str, len); - tmp[ssz + 1] = '\0'; + tmp[ssz] = '\0'; clear(); @@ -232,7 +236,7 @@ void SqString::append(SqString const &old) { - append (old.c_str(), old.len_); + append (old.c_str(), old.size()); } const char& Index: squid3/src/SqString.h =================================================================== RCS file: /cvsroot/squid/squid3/src/SqString.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- squid3/src/SqString.h 18 May 2007 16:56:18 -0000 1.2 +++ squid3/src/SqString.h 20 May 2007 08:29:44 -0000 1.3 @@ -1,6 +1,6 @@ /* - * $Id: SqString.h,v 1.2 2007/05/18 16:56:18 amosjeffries Exp $ + * $Id: SqString.h,v 1.3 2007/05/20 08:29:44 amosjeffries Exp $ * * DEBUG: section 67 String * AUTHOR: Duane Wessels @@ -135,7 +135,7 @@ #endif - void limitInit(const char *str, int len); + void limitInit(const char *str, unsigned int len); private: void initBuf(size_t sz); void init (char const *); Index: squid3/src/tests/testString.cc =================================================================== RCS file: /cvsroot/squid/squid3/src/tests/testString.cc,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- squid3/src/tests/testString.cc 18 May 2007 06:41:33 -0000 1.3 +++ squid3/src/tests/testString.cc 20 May 2007 08:29:44 -0000 1.4 @@ -123,7 +123,55 @@ cStr.append("rld\0 untroubled by things such as null termination", 10); CPPUNIT_ASSERT( !cStr.empty() ); CPPUNIT_ASSERT_EQUAL( 18, cStr.size() ); - CPPUNIT_ASSERT_EQUAL( (string)"hello world\0 untr", cStr ); + CPPUNIT_ASSERT( memcmp("hello world", cStr.c_str(), 11) == 0 ); + CPPUNIT_ASSERT( memcmp("hello world\0", cStr.c_str(), 12) == 0 ); + CPPUNIT_ASSERT( memcmp("hello world\0 untro", cStr.c_str(), 18) == 0 ); + CPPUNIT_ASSERT( memcmp("hello world\0 untro\0", cStr.c_str(), 19) == 0 ); +} + +void +testString::testAccess() +{ + string test; + test = "123456789a"; // to get a predictable length buffer. + + CPPUNIT_ASSERT_EQUAL( test.size(), 10 ); + +/* FIXME: flow checks do not seem to catch assert() sent from within code. */ + /* underflow handling test: _should_ fail with core dump. */ + /* this SHOULD be impossible due to unsigned type of parameter. */ +// CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT( test[-1] ) ); + + /* overflow handling test: _should_ fail with core dump. */ +// CPPUNIT_ASSERT_ASSERTION_FAIL( CPPUNIT_ASSERT( test[test.size()+10] ) ); + + /* [] access method (read and write) */ + CPPUNIT_ASSERT( test[0] == '1' ); + CPPUNIT_ASSERT( test[9] == 'a' ); + CPPUNIT_ASSERT( test[10] == '\0' ); + + test.append('T'); + CPPUNIT_ASSERT( test[10] == 'T' ); + CPPUNIT_ASSERT( test[11] == '\0' ); + CPPUNIT_ASSERT_EQUAL((string)"123456789aT", test); + + /* Random access inside buffer. */ + test[5] = 't'; + CPPUNIT_ASSERT( test[5] == 't' ); + CPPUNIT_ASSERT( test[11] == '\0' ); + CPPUNIT_ASSERT_EQUAL((string)"12345t789aT", test); + + /* border case at last position of string */ + test[9] = 'E'; + CPPUNIT_ASSERT( test[9] == 'E' ); + CPPUNIT_ASSERT( test[11] == '\0' ); + CPPUNIT_ASSERT_EQUAL((string)"12345t789ET", test); + + /* border case at EOS position */ + test[11] = 'F'; + CPPUNIT_ASSERT( test[11] == 'F' ); + CPPUNIT_ASSERT( test[12] == '\0' ); + CPPUNIT_ASSERT_EQUAL((string)"12345t789ETF", test); } void Index: squid3/src/tests/testString.h =================================================================== RCS file: /cvsroot/squid/squid3/src/tests/testString.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- squid3/src/tests/testString.h 18 May 2007 06:41:33 -0000 1.2 +++ squid3/src/tests/testString.h 20 May 2007 08:29:44 -0000 1.3 @@ -20,6 +20,7 @@ CPPUNIT_TEST( testBooleans ); CPPUNIT_TEST( testAppend ); CPPUNIT_TEST( testAssignments ); + CPPUNIT_TEST( testAccess ); CPPUNIT_TEST( testCstrMethods ); CPPUNIT_TEST( testSearch ); CPPUNIT_TEST_SUITE_END(); @@ -36,6 +37,7 @@ void testBooleans(); void testAppend(); void testAssignments(); + void testAccess(); void testCstrMethods(); void testSearch(); };
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor