Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2291)

Unified Diff: Source/platform/image-decoders/FastSharedBufferReaderTest.cpp

Issue 1011113003: Fix potential bug in FastSharedBufferReader::getConsecutiveData (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/platform/image-decoders/FastSharedBufferReaderTest.cpp
diff --git a/Source/platform/image-decoders/FastSharedBufferReaderTest.cpp b/Source/platform/image-decoders/FastSharedBufferReaderTest.cpp
index 2a989f9b0e7e1e8cdf40a78a3119e92f32a20fb0..7979441ce230a54406e233c6e6adfb82694818b2 100644
--- a/Source/platform/image-decoders/FastSharedBufferReaderTest.cpp
+++ b/Source/platform/image-decoders/FastSharedBufferReaderTest.cpp
@@ -38,6 +38,9 @@ namespace blink {
namespace {
+const unsigned segmentSize = 0x1000;
Peter Kasting 2015/03/20 01:10:42 I think you should make the existing constant in S
kbalazs 2015/03/20 20:20:42 Acknowledged.
+const unsigned defaultTestSize = 4 * segmentSize;
+
void prepareReferenceData(char* buffer, size_t size)
{
for (size_t i = 0; i < size; ++i)
@@ -49,7 +52,7 @@ void prepareReferenceData(char* buffer, size_t size)
TEST(FastSharedBufferReaderTest, nonSequentialReads)
{
// This is 4 times SharedBuffer's segment size.
- char referenceData[16384];
+ char referenceData[defaultTestSize];
prepareReferenceData(referenceData, sizeof(referenceData));
RefPtr<SharedBuffer> data = SharedBuffer::create();
data->append(referenceData, sizeof(referenceData));
@@ -69,7 +72,7 @@ TEST(FastSharedBufferReaderTest, nonSequentialReads)
TEST(FastSharedBufferReaderTest, readBackwards)
{
// This is 4 times SharedBuffer's segment size.
- char referenceData[16384];
+ char referenceData[defaultTestSize];
prepareReferenceData(referenceData, sizeof(referenceData));
RefPtr<SharedBuffer> data = SharedBuffer::create();
data->append(referenceData, sizeof(referenceData));
@@ -89,7 +92,7 @@ TEST(FastSharedBufferReaderTest, readBackwards)
TEST(FastSharedBufferReaderTest, byteByByte)
{
// This is 4 times SharedBuffer's segment size.
- char referenceData[16384];
+ char referenceData[defaultTestSize];
prepareReferenceData(referenceData, sizeof(referenceData));
RefPtr<SharedBuffer> data = SharedBuffer::create();
data->append(referenceData, sizeof(referenceData));
@@ -100,4 +103,20 @@ TEST(FastSharedBufferReaderTest, byteByByte)
}
}
+TEST(FastSharedBufferReaderTest, readOverlappingLastSegmentBoundary)
Peter Kasting 2015/03/20 01:10:42 This test should have comments describing the case
kbalazs 2015/03/20 20:20:42 Actually the read doesn't have to go for the very
Peter Kasting 2015/03/20 20:29:33 Are you sure? I read the original code and AFAICT
+{
+ char referenceData[2 * segmentSize];
+ prepareReferenceData(referenceData, sizeof(referenceData));
+ RefPtr<SharedBuffer> data = SharedBuffer::create();
+ // Append it one segment at a time.
Peter Kasting 2015/03/20 01:10:42 Why is this necessary? If seems like SharedBuffer
kbalazs 2015/03/20 20:20:42 Correct.
+ data->append(referenceData, segmentSize);
+ data->append(referenceData + segmentSize, segmentSize);
+
+ char buffer[2 * segmentSize];
+ FastSharedBufferReader reader(data);
+ reader.getConsecutiveData(0, 2 * segmentSize, buffer);
+
+ ASSERT_FALSE(memcmp(buffer, referenceData, 2 * segmentSize));
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698