From 860a605c8d830e9ef83b64ce157bb4a2e2e40d29 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Sun, 2 Jun 2013 03:45:13 +0900 Subject: [PATCH 1/2] Fixed behavior change of ByteVector::containsAt() --- taglib/toolkit/tbytevector.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/taglib/toolkit/tbytevector.cpp b/taglib/toolkit/tbytevector.cpp index ce47fbb8..631acc87 100644 --- a/taglib/toolkit/tbytevector.cpp +++ b/taglib/toolkit/tbytevector.cpp @@ -601,11 +601,11 @@ bool ByteVector::containsAt(const ByteVector &pattern, uint offset, uint pattern patternLength = pattern.size(); // do some sanity checking -- all of these things are needed for the search to be valid - - if(offset + patternLength > size() || patternOffset >= pattern.size() || patternLength == 0) + const uint compareLength = patternLength - patternOffset; + if(offset + compareLength > size() || patternOffset >= pattern.size() || patternLength == 0) return false; - return (::memcmp(data() + offset, pattern.data() + patternOffset, patternLength - patternOffset) == 0); + return (::memcmp(data() + offset, pattern.data() + patternOffset, compareLength) == 0); } bool ByteVector::startsWith(const ByteVector &pattern) const From 767a6ec4a2245d4f2cb9224eecd5c36f51f91fb4 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Sun, 2 Jun 2013 03:58:50 +0900 Subject: [PATCH 2/2] Added some tests for containsAt() --- tests/test_bytevector.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/test_bytevector.cpp b/tests/test_bytevector.cpp index dd433456..9efd23af 100644 --- a/tests/test_bytevector.cpp +++ b/tests/test_bytevector.cpp @@ -112,12 +112,17 @@ public: ByteVector s2("f"); CPPUNIT_ASSERT(ByteVectorList::split(s2, " ").size() == 1); - CPPUNIT_ASSERT(ByteVector().size() == 0); CPPUNIT_ASSERT(ByteVector("asdf").clear().size() == 0); CPPUNIT_ASSERT(ByteVector("asdf").clear() == ByteVector()); - } + ByteVector i("blah blah"); + ByteVector j("blah"); + CPPUNIT_ASSERT(i.containsAt(j, 5, 0)); + CPPUNIT_ASSERT(i.containsAt(j, 6, 1)); + CPPUNIT_ASSERT(i.containsAt(j, 6, 1, 3)); + } + void testFind1() { CPPUNIT_ASSERT_EQUAL(4, ByteVector("....SggO."). find("SggO"));