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

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: fix my bug too... 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 kDefaultTestSize = 4 * SharedBuffer::kSegmentSize;
42
41 void prepareReferenceData(char* buffer, size_t size) 43 void prepareReferenceData(char* buffer, size_t size)
42 { 44 {
43 for (size_t i = 0; i < size; ++i) 45 for (size_t i = 0; i < size; ++i)
44 buffer[i] = i; 46 buffer[i] = i;
45 } 47 }
46 48
47 } // namespace 49 } // namespace
48 50
49 TEST(FastSharedBufferReaderTest, nonSequentialReads) 51 TEST(FastSharedBufferReaderTest, nonSequentialReads)
50 { 52 {
51 // This is 4 times SharedBuffer's segment size. 53 char referenceData[kDefaultTestSize];
52 char referenceData[16384];
53 prepareReferenceData(referenceData, sizeof(referenceData)); 54 prepareReferenceData(referenceData, sizeof(referenceData));
54 RefPtr<SharedBuffer> data = SharedBuffer::create(); 55 RefPtr<SharedBuffer> data = SharedBuffer::create();
55 data->append(referenceData, sizeof(referenceData)); 56 data->append(referenceData, sizeof(referenceData));
56 57
57 FastSharedBufferReader reader(data); 58 FastSharedBufferReader reader(data);
58 59
59 // Read size is prime such there will be a segment-spanning 60 // Read size is prime such there will be a segment-spanning
60 // read eventually. 61 // read eventually.
61 char tempBuffer[17]; 62 char tempBuffer[17];
62 for (size_t dataPosition = 0; dataPosition + sizeof(tempBuffer) < sizeof(ref erenceData); dataPosition += sizeof(tempBuffer)) { 63 for (size_t dataPosition = 0; dataPosition + sizeof(tempBuffer) < sizeof(ref erenceData); dataPosition += sizeof(tempBuffer)) {
63 const char* block = reader.getConsecutiveData( 64 const char* block = reader.getConsecutiveData(
64 dataPosition, sizeof(tempBuffer), tempBuffer); 65 dataPosition, sizeof(tempBuffer), tempBuffer);
65 ASSERT_FALSE(memcmp(block, referenceData + dataPosition, sizeof(tempBuff er))); 66 ASSERT_FALSE(memcmp(block, referenceData + dataPosition, sizeof(tempBuff er)));
66 } 67 }
67 } 68 }
68 69
69 TEST(FastSharedBufferReaderTest, readBackwards) 70 TEST(FastSharedBufferReaderTest, readBackwards)
70 { 71 {
71 // This is 4 times SharedBuffer's segment size. 72 char referenceData[kDefaultTestSize];
72 char referenceData[16384];
73 prepareReferenceData(referenceData, sizeof(referenceData)); 73 prepareReferenceData(referenceData, sizeof(referenceData));
74 RefPtr<SharedBuffer> data = SharedBuffer::create(); 74 RefPtr<SharedBuffer> data = SharedBuffer::create();
75 data->append(referenceData, sizeof(referenceData)); 75 data->append(referenceData, sizeof(referenceData));
76 76
77 FastSharedBufferReader reader(data); 77 FastSharedBufferReader reader(data);
78 78
79 // Read size is prime such there will be a segment-spanning 79 // Read size is prime such there will be a segment-spanning
80 // read eventually. 80 // read eventually.
81 char tempBuffer[17]; 81 char tempBuffer[17];
82 for (size_t dataOffset = sizeof(tempBuffer); dataOffset < sizeof(referenceDa ta); dataOffset += sizeof(tempBuffer)) { 82 for (size_t dataOffset = sizeof(tempBuffer); dataOffset < sizeof(referenceDa ta); dataOffset += sizeof(tempBuffer)) {
83 const char* block = reader.getConsecutiveData( 83 const char* block = reader.getConsecutiveData(
84 sizeof(referenceData) - dataOffset, sizeof(tempBuffer), tempBuffer); 84 sizeof(referenceData) - dataOffset, sizeof(tempBuffer), tempBuffer);
85 ASSERT_FALSE(memcmp(block, referenceData + sizeof(referenceData) - dataO ffset, sizeof(tempBuffer))); 85 ASSERT_FALSE(memcmp(block, referenceData + sizeof(referenceData) - dataO ffset, sizeof(tempBuffer)));
86 } 86 }
87 } 87 }
88 88
89 TEST(FastSharedBufferReaderTest, byteByByte) 89 TEST(FastSharedBufferReaderTest, byteByByte)
90 { 90 {
91 // This is 4 times SharedBuffer's segment size. 91 char referenceData[kDefaultTestSize];
92 char referenceData[16384];
93 prepareReferenceData(referenceData, sizeof(referenceData)); 92 prepareReferenceData(referenceData, sizeof(referenceData));
94 RefPtr<SharedBuffer> data = SharedBuffer::create(); 93 RefPtr<SharedBuffer> data = SharedBuffer::create();
95 data->append(referenceData, sizeof(referenceData)); 94 data->append(referenceData, sizeof(referenceData));
96 95
97 FastSharedBufferReader reader(data); 96 FastSharedBufferReader reader(data);
98 for (size_t i = 0; i < sizeof(referenceData); ++i) { 97 for (size_t i = 0; i < sizeof(referenceData); ++i) {
99 ASSERT_EQ(referenceData[i], reader.getOneByte(i)); 98 ASSERT_EQ(referenceData[i], reader.getOneByte(i));
100 } 99 }
101 } 100 }
102 101
102 // Tests that a read starting from the one to last segment and goes to the end
103 // of the last segment works correctly.
Peter Kasting 2015/03/25 19:53:11 Nit: How about: Tests that a read from inside the
104 TEST(FastSharedBufferReaderTest, readAllOverlappingLastSegmentBoundary)
105 {
106 const unsigned dataSize = 2 * SharedBuffer::kSegmentSize;
107 char referenceData[dataSize];
108 prepareReferenceData(referenceData, dataSize);
109 RefPtr<SharedBuffer> data = SharedBuffer::create();
110 data->append(referenceData, dataSize);
111
112 char buffer[dataSize];
113 FastSharedBufferReader reader(data);
114 reader.getConsecutiveData(0, dataSize, buffer);
115
116 ASSERT_FALSE(memcmp(buffer, referenceData, dataSize));
117 }
118
103 } // namespace blink 119 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698