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

Side by Side Diff: third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.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 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 { 202 {
203 WTF_LOG(Network, "DocumentWebSocketChannel %p sendArrayBuffer(%p, %u, %u)", this, buffer.data(), byteOffset, byteLength); 203 WTF_LOG(Network, "DocumentWebSocketChannel %p sendArrayBuffer(%p, %u, %u)", this, buffer.data(), byteOffset, byteLength);
204 if (m_identifier) { 204 if (m_identifier) {
205 // FIXME: Change the inspector API to show the entire message instead 205 // FIXME: Change the inspector API to show the entire message instead
206 // of individual frames. 206 // of individual frames.
207 InspectorInstrumentation::didSendWebSocketFrame(document(), m_identifier , WebSocketFrame::OpCodeBinary, true, static_cast<const char*>(buffer.data()) + byteOffset, byteLength); 207 InspectorInstrumentation::didSendWebSocketFrame(document(), m_identifier , WebSocketFrame::OpCodeBinary, true, static_cast<const char*>(buffer.data()) + byteOffset, byteLength);
208 } 208 }
209 // buffer.slice copies its contents. 209 // buffer.slice copies its contents.
210 // FIXME: Reduce copy by sending the data immediately when we don't need to 210 // FIXME: Reduce copy by sending the data immediately when we don't need to
211 // queue the data. 211 // queue the data.
212 m_messages.append(adoptPtr(new Message(buffer.slice(byteOffset, byteOffset + byteLength)))); 212 RefPtr<DOMArrayBuffer> slice = buffer.sliceOrNull(byteOffset, byteOffset + b yteLength);
213 // FIXME: Could we propagate a RangeError exception from here instead the fo llowing assert?
214 RELEASE_ASSERT(slice); // This is an out-of-memory condition.
215 m_messages.append(adoptPtr(new Message(slice.release())));
213 processSendQueue(); 216 processSendQueue();
214 } 217 }
215 218
216 void DocumentWebSocketChannel::sendTextAsCharVector(PassOwnPtr<Vector<char>> dat a) 219 void DocumentWebSocketChannel::sendTextAsCharVector(PassOwnPtr<Vector<char>> dat a)
217 { 220 {
218 WTF_LOG(Network, "DocumentWebSocketChannel %p sendTextAsCharVector(%p, %llu) ", this, data.get(), static_cast<unsigned long long>(data->size())); 221 WTF_LOG(Network, "DocumentWebSocketChannel %p sendTextAsCharVector(%p, %llu) ", this, data.get(), static_cast<unsigned long long>(data->size()));
219 if (m_identifier) { 222 if (m_identifier) {
220 // FIXME: Change the inspector API to show the entire message instead 223 // FIXME: Change the inspector API to show the entire message instead
221 // of individual frames. 224 // of individual frames.
222 InspectorInstrumentation::didSendWebSocketFrame(document(), m_identifier , WebSocketFrame::OpCodeText, true, data->data(), data->size()); 225 InspectorInstrumentation::didSendWebSocketFrame(document(), m_identifier , WebSocketFrame::OpCodeText, true, data->data(), data->size());
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 579
577 DEFINE_TRACE(DocumentWebSocketChannel) 580 DEFINE_TRACE(DocumentWebSocketChannel)
578 { 581 {
579 visitor->trace(m_blobLoader); 582 visitor->trace(m_blobLoader);
580 visitor->trace(m_client); 583 visitor->trace(m_client);
581 WebSocketChannel::trace(visitor); 584 WebSocketChannel::trace(visitor);
582 ContextLifecycleObserver::trace(visitor); 585 ContextLifecycleObserver::trace(visitor);
583 } 586 }
584 587
585 } // namespace blink 588 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698