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

Unified Diff: third_party/WebKit/Source/platform/SharedBuffer.cpp

Issue 1571233003: Fix errors caused by unsafe conversions to/from size_t (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: improved ALLOW_NUMERIC_ARG_TYPES_PROMOTABLE_TO Created 4 years, 11 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: third_party/WebKit/Source/platform/SharedBuffer.cpp
diff --git a/third_party/WebKit/Source/platform/SharedBuffer.cpp b/third_party/WebKit/Source/platform/SharedBuffer.cpp
index c043163ba8562bff45e42c424c7604e130112522..ef20e4361a3b3283815c9aebbdeaf4b041f0d871 100644
--- a/third_party/WebKit/Source/platform/SharedBuffer.cpp
+++ b/third_party/WebKit/Source/platform/SharedBuffer.cpp
@@ -42,12 +42,12 @@
namespace blink {
-static inline unsigned segmentIndex(unsigned position)
+static inline size_t segmentIndex(size_t position)
{
return position / SharedBuffer::kSegmentSize;
}
-static inline unsigned offsetInSegment(unsigned position)
+static inline size_t offsetInSegment(size_t position)
{
return position % SharedBuffer::kSegmentSize;
}
@@ -85,22 +85,22 @@ static bool sizeComparator(SharedBuffer* a, SharedBuffer* b)
static CString snippetForBuffer(SharedBuffer* sharedBuffer)
{
- const unsigned kMaxSnippetLength = 64;
+ const size_t kMaxSnippetLength = 64;
char* snippet = 0;
- unsigned snippetLength = std::min(sharedBuffer->size(), kMaxSnippetLength);
+ size_t snippetLength = std::min(sharedBuffer->size(), kMaxSnippetLength);
CString result = CString::newUninitialized(snippetLength, snippet);
const char* segment;
- unsigned offset = 0;
- while (unsigned segmentLength = sharedBuffer->getSomeData(segment, offset)) {
- unsigned length = std::min(segmentLength, snippetLength - offset);
+ size_t offset = 0;
+ while (size_t segmentLength = sharedBuffer->getSomeDataInternal(segment, offset)) {
+ size_t length = std::min(segmentLength, snippetLength - offset);
memcpy(snippet + offset, segment, length);
offset += segmentLength;
if (offset >= snippetLength)
break;
}
- for (unsigned i = 0; i < snippetLength; ++i) {
+ for (size_t i = 0; i < snippetLength; ++i) {
if (!isASCIIPrintable(snippet[i]))
snippet[i] = '?';
}
@@ -159,41 +159,33 @@ SharedBuffer::SharedBuffer(size_t size)
#endif
}
-SharedBuffer::SharedBuffer(const char* data, int size)
+SharedBuffer::SharedBuffer(const char* data, size_t size)
: m_size(0)
, m_buffer(PurgeableVector::NotPurgeable)
{
- // FIXME: Use unsigned consistently, and check for invalid casts when calling into SharedBuffer from other code.
- if (size < 0)
- CRASH();
-
- append(data, size);
+ appendInternal(data, size);
#ifdef SHARED_BUFFER_STATS
didCreateSharedBuffer(this);
#endif
}
-SharedBuffer::SharedBuffer(const char* data, unsigned size, PurgeableVector::PurgeableOption purgeable)
+SharedBuffer::SharedBuffer(const char* data, size_t size, PurgeableVector::PurgeableOption purgeable)
: m_size(0)
, m_buffer(purgeable)
{
- append(data, size);
+ appendInternal(data, size);
#ifdef SHARED_BUFFER_STATS
didCreateSharedBuffer(this);
#endif
}
-SharedBuffer::SharedBuffer(const unsigned char* data, int size)
+SharedBuffer::SharedBuffer(const unsigned char* data, size_t size)
: m_size(0)
, m_buffer(PurgeableVector::NotPurgeable)
{
- // FIXME: Use unsigned consistently, and check for invalid casts when calling into SharedBuffer from other code.
- if (size < 0)
- CRASH();
-
- append(reinterpret_cast<const char*>(data), size);
+ appendInternal(reinterpret_cast<const char*>(data), size);
#ifdef SHARED_BUFFER_STATS
didCreateSharedBuffer(this);
@@ -217,7 +209,7 @@ PassRefPtr<SharedBuffer> SharedBuffer::adoptVector(Vector<char>& vector)
return buffer.release();
}
-unsigned SharedBuffer::size() const
+size_t SharedBuffer::size() const
{
return m_size;
}
@@ -232,20 +224,20 @@ void SharedBuffer::append(PassRefPtr<SharedBuffer> data)
{
const char* segment;
size_t position = 0;
- while (size_t length = data->getSomeData(segment, position)) {
+ while (size_t length = data->getSomeDataInternal(segment, position)) {
append(segment, length);
position += length;
}
}
-void SharedBuffer::append(const char* data, unsigned length)
+void SharedBuffer::appendInternal(const char* data, size_t length)
{
ASSERT(isLocked());
if (!length)
return;
ASSERT(m_size >= m_buffer.size());
- unsigned positionInSegment = offsetInSegment(m_size - m_buffer.size());
+ size_t positionInSegment = offsetInSegment(m_size - m_buffer.size());
m_size += length;
if (m_size <= kSegmentSize) {
@@ -261,19 +253,19 @@ void SharedBuffer::append(const char* data, unsigned length)
} else
segment = m_segments.last() + positionInSegment;
- unsigned segmentFreeSpace = kSegmentSize - positionInSegment;
- unsigned bytesToCopy = std::min(length, segmentFreeSpace);
+ size_t segmentFreeSpace = kSegmentSize - positionInSegment;
+ size_t bytesToCopy = std::min(length, segmentFreeSpace);
for (;;) {
memcpy(segment, data, bytesToCopy);
- if (static_cast<unsigned>(length) == bytesToCopy)
+ if (length == bytesToCopy)
break;
length -= bytesToCopy;
data += bytesToCopy;
segment = allocateSegment();
m_segments.append(segment);
- bytesToCopy = std::min(length, static_cast<unsigned>(kSegmentSize));
+ bytesToCopy = std::min(length, static_cast<size_t>(kSegmentSize));
}
}
@@ -284,7 +276,7 @@ void SharedBuffer::append(const Vector<char>& data)
void SharedBuffer::clear()
{
- for (unsigned i = 0; i < m_segments.size(); ++i)
+ for (size_t i = 0; i < m_segments.size(); ++i)
freeSegment(m_segments[i]);
m_segments.clear();
@@ -300,8 +292,8 @@ PassRefPtr<SharedBuffer> SharedBuffer::copy() const
clone->m_buffer.append(m_buffer.data(), m_buffer.size());
if (!m_segments.isEmpty()) {
const char* segment = 0;
- unsigned position = m_buffer.size();
- while (unsigned segmentSize = getSomeData(segment, position)) {
+ size_t position = m_buffer.size();
+ while (size_t segmentSize = getSomeDataInternal(segment, position)) {
clone->m_buffer.append(segment, segmentSize);
position += segmentSize;
}
@@ -312,11 +304,11 @@ PassRefPtr<SharedBuffer> SharedBuffer::copy() const
void SharedBuffer::mergeSegmentsIntoBuffer() const
{
- unsigned bufferSize = m_buffer.size();
+ size_t bufferSize = m_buffer.size();
if (m_size > bufferSize) {
- unsigned bytesLeft = m_size - bufferSize;
- for (unsigned i = 0; i < m_segments.size(); ++i) {
- unsigned bytesToCopy = std::min(bytesLeft, static_cast<unsigned>(kSegmentSize));
+ size_t bytesLeft = m_size - bufferSize;
+ for (size_t i = 0; i < m_segments.size(); ++i) {
+ size_t bytesToCopy = std::min(bytesLeft, static_cast<size_t>(kSegmentSize));
m_buffer.append(m_segments[i], bytesToCopy);
bytesLeft -= bytesToCopy;
freeSegment(m_segments[i]);
@@ -325,31 +317,31 @@ void SharedBuffer::mergeSegmentsIntoBuffer() const
}
}
-unsigned SharedBuffer::getSomeData(const char*& someData, unsigned position) const
+size_t SharedBuffer::getSomeDataInternal(const char*& someData, size_t position) const
{
ASSERT(isLocked());
- unsigned totalSize = size();
+ size_t totalSize = size();
if (position >= totalSize) {
someData = 0;
return 0;
}
ASSERT_WITH_SECURITY_IMPLICATION(position < m_size);
- unsigned consecutiveSize = m_buffer.size();
+ size_t consecutiveSize = m_buffer.size();
if (position < consecutiveSize) {
someData = m_buffer.data() + position;
return consecutiveSize - position;
}
position -= consecutiveSize;
- unsigned segments = m_segments.size();
- unsigned maxSegmentedSize = segments * kSegmentSize;
- unsigned segment = segmentIndex(position);
+ size_t segments = m_segments.size();
+ size_t maxSegmentedSize = segments * kSegmentSize;
+ size_t segment = segmentIndex(position);
if (segment < segments) {
- unsigned bytesLeft = totalSize - consecutiveSize;
- unsigned segmentedSize = std::min(maxSegmentedSize, bytesLeft);
+ size_t bytesLeft = totalSize - consecutiveSize;
+ size_t segmentedSize = std::min(maxSegmentedSize, bytesLeft);
- unsigned positionInSegment = offsetInSegment(position);
+ size_t positionInSegment = offsetInSegment(position);
someData = m_segments[segment] + positionInSegment;
return segment == segments - 1 ? segmentedSize - position : kSegmentSize - positionInSegment;
}
@@ -357,14 +349,14 @@ unsigned SharedBuffer::getSomeData(const char*& someData, unsigned position) con
return 0;
}
-bool SharedBuffer::getAsBytes(void* dest, unsigned byteLength) const
+bool SharedBuffer::getAsBytesInternal(void* dest, size_t byteLength) const
{
if (!dest || byteLength != size())
return false;
const char* segment = 0;
- unsigned position = 0;
- while (unsigned segmentSize = getSomeData(segment, position)) {
+ size_t position = 0;
+ while (size_t segmentSize = getSomeDataInternal(segment, position)) {
memcpy(static_cast<char*>(dest) + position, segment, segmentSize);
position += segmentSize;
}
@@ -380,12 +372,12 @@ bool SharedBuffer::getAsBytes(void* dest, unsigned byteLength) const
PassRefPtr<SkData> SharedBuffer::getAsSkData() const
{
- unsigned bufferLength = size();
+ size_t bufferLength = size();
SkData* data = SkData::NewUninitialized(bufferLength);
char* buffer = static_cast<char*>(data->writable_data());
const char* segment = 0;
- unsigned position = 0;
- while (unsigned segmentSize = getSomeData(segment, position)) {
+ size_t position = 0;
+ while (size_t segmentSize = getSomeDataInternal(segment, position)) {
memcpy(buffer + position, segment, segmentSize);
position += segmentSize;
}
« no previous file with comments | « third_party/WebKit/Source/platform/SharedBuffer.h ('k') | third_party/WebKit/Source/platform/SharedBufferTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698