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

Side by Side 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2015 Google Inc. All rights reserved. 2 * Copyright (C) 2015 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 20 matching lines...) Expand all
31 #include "config.h" 31 #include "config.h"
32 32
33 #include "platform/image-decoders/FastSharedBufferReader.h" 33 #include "platform/image-decoders/FastSharedBufferReader.h"
34 34
35 #include <gtest/gtest.h> 35 #include <gtest/gtest.h>
36 36
37 namespace blink { 37 namespace blink {
38 38
39 namespace { 39 namespace {
40 40
41 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.
42 const unsigned defaultTestSize = 4 * segmentSize;
43
41 void prepareReferenceData(char* buffer, size_t size) 44 void prepareReferenceData(char* buffer, size_t size)
42 { 45 {
43 for (size_t i = 0; i < size; ++i) 46 for (size_t i = 0; i < size; ++i)
44 buffer[i] = i; 47 buffer[i] = i;
45 } 48 }
46 49
47 } // namespace 50 } // namespace
48 51
49 TEST(FastSharedBufferReaderTest, nonSequentialReads) 52 TEST(FastSharedBufferReaderTest, nonSequentialReads)
50 { 53 {
51 // This is 4 times SharedBuffer's segment size. 54 // This is 4 times SharedBuffer's segment size.
52 char referenceData[16384]; 55 char referenceData[defaultTestSize];
53 prepareReferenceData(referenceData, sizeof(referenceData)); 56 prepareReferenceData(referenceData, sizeof(referenceData));
54 RefPtr<SharedBuffer> data = SharedBuffer::create(); 57 RefPtr<SharedBuffer> data = SharedBuffer::create();
55 data->append(referenceData, sizeof(referenceData)); 58 data->append(referenceData, sizeof(referenceData));
56 59
57 FastSharedBufferReader reader(data); 60 FastSharedBufferReader reader(data);
58 61
59 // Read size is prime such there will be a segment-spanning 62 // Read size is prime such there will be a segment-spanning
60 // read eventually. 63 // read eventually.
61 char tempBuffer[17]; 64 char tempBuffer[17];
62 for (size_t dataPosition = 0; dataPosition + sizeof(tempBuffer) < sizeof(ref erenceData); dataPosition += sizeof(tempBuffer)) { 65 for (size_t dataPosition = 0; dataPosition + sizeof(tempBuffer) < sizeof(ref erenceData); dataPosition += sizeof(tempBuffer)) {
63 const char* block = reader.getConsecutiveData( 66 const char* block = reader.getConsecutiveData(
64 dataPosition, sizeof(tempBuffer), tempBuffer); 67 dataPosition, sizeof(tempBuffer), tempBuffer);
65 ASSERT_FALSE(memcmp(block, referenceData + dataPosition, sizeof(tempBuff er))); 68 ASSERT_FALSE(memcmp(block, referenceData + dataPosition, sizeof(tempBuff er)));
66 } 69 }
67 } 70 }
68 71
69 TEST(FastSharedBufferReaderTest, readBackwards) 72 TEST(FastSharedBufferReaderTest, readBackwards)
70 { 73 {
71 // This is 4 times SharedBuffer's segment size. 74 // This is 4 times SharedBuffer's segment size.
72 char referenceData[16384]; 75 char referenceData[defaultTestSize];
73 prepareReferenceData(referenceData, sizeof(referenceData)); 76 prepareReferenceData(referenceData, sizeof(referenceData));
74 RefPtr<SharedBuffer> data = SharedBuffer::create(); 77 RefPtr<SharedBuffer> data = SharedBuffer::create();
75 data->append(referenceData, sizeof(referenceData)); 78 data->append(referenceData, sizeof(referenceData));
76 79
77 FastSharedBufferReader reader(data); 80 FastSharedBufferReader reader(data);
78 81
79 // Read size is prime such there will be a segment-spanning 82 // Read size is prime such there will be a segment-spanning
80 // read eventually. 83 // read eventually.
81 char tempBuffer[17]; 84 char tempBuffer[17];
82 for (size_t dataOffset = sizeof(tempBuffer); dataOffset < sizeof(referenceDa ta); dataOffset += sizeof(tempBuffer)) { 85 for (size_t dataOffset = sizeof(tempBuffer); dataOffset < sizeof(referenceDa ta); dataOffset += sizeof(tempBuffer)) {
83 const char* block = reader.getConsecutiveData( 86 const char* block = reader.getConsecutiveData(
84 sizeof(referenceData) - dataOffset, sizeof(tempBuffer), tempBuffer); 87 sizeof(referenceData) - dataOffset, sizeof(tempBuffer), tempBuffer);
85 ASSERT_FALSE(memcmp(block, referenceData + sizeof(referenceData) - dataO ffset, sizeof(tempBuffer))); 88 ASSERT_FALSE(memcmp(block, referenceData + sizeof(referenceData) - dataO ffset, sizeof(tempBuffer)));
86 } 89 }
87 } 90 }
88 91
89 TEST(FastSharedBufferReaderTest, byteByByte) 92 TEST(FastSharedBufferReaderTest, byteByByte)
90 { 93 {
91 // This is 4 times SharedBuffer's segment size. 94 // This is 4 times SharedBuffer's segment size.
92 char referenceData[16384]; 95 char referenceData[defaultTestSize];
93 prepareReferenceData(referenceData, sizeof(referenceData)); 96 prepareReferenceData(referenceData, sizeof(referenceData));
94 RefPtr<SharedBuffer> data = SharedBuffer::create(); 97 RefPtr<SharedBuffer> data = SharedBuffer::create();
95 data->append(referenceData, sizeof(referenceData)); 98 data->append(referenceData, sizeof(referenceData));
96 99
97 FastSharedBufferReader reader(data); 100 FastSharedBufferReader reader(data);
98 for (size_t i = 0; i < sizeof(referenceData); ++i) { 101 for (size_t i = 0; i < sizeof(referenceData); ++i) {
99 ASSERT_EQ(referenceData[i], reader.getOneByte(i)); 102 ASSERT_EQ(referenceData[i], reader.getOneByte(i));
100 } 103 }
101 } 104 }
102 105
106 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
107 {
108 char referenceData[2 * segmentSize];
109 prepareReferenceData(referenceData, sizeof(referenceData));
110 RefPtr<SharedBuffer> data = SharedBuffer::create();
111 // 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.
112 data->append(referenceData, segmentSize);
113 data->append(referenceData + segmentSize, segmentSize);
114
115 char buffer[2 * segmentSize];
116 FastSharedBufferReader reader(data);
117 reader.getConsecutiveData(0, 2 * segmentSize, buffer);
118
119 ASSERT_FALSE(memcmp(buffer, referenceData, 2 * segmentSize));
120 }
121
103 } // namespace blink 122 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698