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

Side by Side Diff: third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp

Issue 1414553002: Fix out-of-memory crashes related to ArrayBuffer allocation Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "modules/fetch/BodyStreamBuffer.h" 6 #include "modules/fetch/BodyStreamBuffer.h"
7 7
8 #include "core/dom/DOMArrayBuffer.h" 8 #include "core/dom/DOMArrayBuffer.h"
9 #include "core/dom/DOMTypedArray.h" 9 #include "core/dom/DOMTypedArray.h"
10 #include "core/dom/ExceptionCode.h" 10 #include "core/dom/ExceptionCode.h"
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 206
207 void BodyStreamBuffer::processData() 207 void BodyStreamBuffer::processData()
208 { 208 {
209 ASSERT(m_reader); 209 ASSERT(m_reader);
210 while (m_streamNeedsMore) { 210 while (m_streamNeedsMore) {
211 const void* buffer; 211 const void* buffer;
212 size_t available; 212 size_t available;
213 WebDataConsumerHandle::Result result = m_reader->beginRead(&buffer, WebD ataConsumerHandle::FlagNone, &available); 213 WebDataConsumerHandle::Result result = m_reader->beginRead(&buffer, WebD ataConsumerHandle::FlagNone, &available);
214 switch (result) { 214 switch (result) {
215 case WebDataConsumerHandle::Ok: 215 case WebDataConsumerHandle::Ok:
216 m_streamNeedsMore = m_stream->enqueue(DOMUint8Array::create(static_c ast<const unsigned char*>(buffer), available)); 216 {
217 m_reader->endRead(available); 217 RefPtr<DOMUint8Array> domArray = DOMUint8Array::createOrNull(sta tic_cast<const unsigned char*>(buffer), available);
218 break; 218 if (!domArray) {
219 m_reader = nullptr;
220 m_stream->error(DOMException::create(V8RangeError, "Out of M emory."));
221 m_handle.clear();
222 } else {
223 m_streamNeedsMore = m_stream->enqueue(domArray);
224 m_reader->endRead(available);
225 }
226 }
227 return;
219 228
220 case WebDataConsumerHandle::Done: 229 case WebDataConsumerHandle::Done:
221 close(); 230 close();
222 return; 231 return;
223 232
224 case WebDataConsumerHandle::ShouldWait: 233 case WebDataConsumerHandle::ShouldWait:
225 return; 234 return;
226 235
227 case WebDataConsumerHandle::Busy: 236 case WebDataConsumerHandle::Busy:
228 case WebDataConsumerHandle::ResourceExhausted: 237 case WebDataConsumerHandle::ResourceExhausted:
(...skipping 21 matching lines...) Expand all
250 unlock(); 259 unlock();
251 if (mode == EndLoadingDone) { 260 if (mode == EndLoadingDone) {
252 close(); 261 close();
253 } else { 262 } else {
254 ASSERT(mode == EndLoadingErrored); 263 ASSERT(mode == EndLoadingErrored);
255 error(); 264 error();
256 } 265 }
257 } 266 }
258 267
259 } // namespace blink 268 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698