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

Side by Side Diff: Source/core/xml/XMLHttpRequest.cpp

Issue 618583002: Correct data size argument type in resource loading path to unsigned (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 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) 2004, 2006, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2005-2007 Alexey Proskuryakov <ap@webkit.org> 3 * Copyright (C) 2005-2007 Alexey Proskuryakov <ap@webkit.org>
4 * Copyright (C) 2007, 2008 Julien Chaffraix <jchaffraix@webkit.org> 4 * Copyright (C) 2007, 2008 Julien Chaffraix <jchaffraix@webkit.org>
5 * Copyright (C) 2008, 2011 Google Inc. All rights reserved. 5 * Copyright (C) 2008, 2011 Google Inc. All rights reserved.
6 * Copyright (C) 2012 Intel Corporation 6 * Copyright (C) 2012 Intel Corporation
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public 9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 #include "platform/network/ParsedContentType.h" 60 #include "platform/network/ParsedContentType.h"
61 #include "platform/network/ResourceError.h" 61 #include "platform/network/ResourceError.h"
62 #include "platform/network/ResourceRequest.h" 62 #include "platform/network/ResourceRequest.h"
63 #include "public/platform/WebURLRequest.h" 63 #include "public/platform/WebURLRequest.h"
64 #include "wtf/ArrayBuffer.h" 64 #include "wtf/ArrayBuffer.h"
65 #include "wtf/ArrayBufferView.h" 65 #include "wtf/ArrayBufferView.h"
66 #include "wtf/Assertions.h" 66 #include "wtf/Assertions.h"
67 #include "wtf/RefCountedLeakCounter.h" 67 #include "wtf/RefCountedLeakCounter.h"
68 #include "wtf/StdLibExtras.h" 68 #include "wtf/StdLibExtras.h"
69 #include "wtf/text/CString.h" 69 #include "wtf/text/CString.h"
70 #include <limits.h>
70 71
71 namespace blink { 72 namespace blink {
72 73
73 DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, xmlHttpRequestCounter, ("XM LHttpRequest")); 74 DEFINE_DEBUG_ONLY_GLOBAL(WTF::RefCountedLeakCounter, xmlHttpRequestCounter, ("XM LHttpRequest"));
74 75
75 static bool isSetCookieHeader(const AtomicString& name) 76 static bool isSetCookieHeader(const AtomicString& name)
76 { 77 {
77 return equalIgnoringCase(name, "set-cookie") || equalIgnoringCase(name, "set -cookie2"); 78 return equalIgnoringCase(name, "set-cookie") || equalIgnoringCase(name, "set -cookie2");
78 } 79 }
79 80
(...skipping 1305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1385 m_response = response; 1386 m_response = response;
1386 if (!m_mimeTypeOverride.isEmpty()) { 1387 if (!m_mimeTypeOverride.isEmpty()) {
1387 m_response.setHTTPHeaderField("Content-Type", m_mimeTypeOverride); 1388 m_response.setHTTPHeaderField("Content-Type", m_mimeTypeOverride);
1388 m_finalResponseCharset = extractCharsetFromMediaType(m_mimeTypeOverride) ; 1389 m_finalResponseCharset = extractCharsetFromMediaType(m_mimeTypeOverride) ;
1389 } 1390 }
1390 1391
1391 if (m_finalResponseCharset.isEmpty()) 1392 if (m_finalResponseCharset.isEmpty())
1392 m_finalResponseCharset = response.textEncodingName(); 1393 m_finalResponseCharset = response.textEncodingName();
1393 } 1394 }
1394 1395
1395 void XMLHttpRequest::parseDocumentChunk(const char* data, int len) 1396 void XMLHttpRequest::parseDocumentChunk(const char* data, unsigned len)
1396 { 1397 {
1397 if (!m_responseDocumentParser) { 1398 if (!m_responseDocumentParser) {
1398 ASSERT(!m_responseDocument); 1399 ASSERT(!m_responseDocument);
1399 initResponseDocument(); 1400 initResponseDocument();
1400 if (!m_responseDocument) 1401 if (!m_responseDocument)
1401 return; 1402 return;
1402 1403
1403 m_responseDocumentParser = m_responseDocument->implicitOpen(); 1404 m_responseDocumentParser = m_responseDocument->implicitOpen();
1404 m_responseDocumentParser->addClient(this); 1405 m_responseDocumentParser->addClient(this);
1405 } 1406 }
(...skipping 23 matching lines...) Expand all
1429 1430
1430 return decoder.release(); 1431 return decoder.release();
1431 } 1432 }
1432 1433
1433 if (responseIsHTML()) 1434 if (responseIsHTML())
1434 return TextResourceDecoder::create("text/html", "UTF-8"); 1435 return TextResourceDecoder::create("text/html", "UTF-8");
1435 1436
1436 return TextResourceDecoder::create("text/plain", "UTF-8"); 1437 return TextResourceDecoder::create("text/plain", "UTF-8");
1437 } 1438 }
1438 1439
1439 void XMLHttpRequest::didReceiveData(const char* data, int len) 1440 void XMLHttpRequest::didReceiveData(const char* data, unsigned len)
1440 { 1441 {
1441 ASSERT(!m_downloadingToFile); 1442 ASSERT(!m_downloadingToFile);
1442 1443
1443 if (m_error) 1444 if (m_error)
1444 return; 1445 return;
1445 1446
1446 if (m_state < HEADERS_RECEIVED) 1447 if (m_state < HEADERS_RECEIVED)
1447 changeState(HEADERS_RECEIVED); 1448 changeState(HEADERS_RECEIVED);
1448 1449
1449 // We need to check for |m_error| again, because |changeState| may trigger 1450 // We need to check for |m_error| again, because |changeState| may trigger
1450 // readystatechange, and user javascript can cause |abort()|. 1451 // readystatechange, and user javascript can cause |abort()|.
1451 if (m_error) 1452 if (m_error)
1452 return; 1453 return;
1453 1454
1454 if (!len) 1455 if (!len)
1455 return; 1456 return;
1456 1457
1457 if (len == -1)
1458 len = strlen(data);
1459
1460 if (m_responseTypeCode == ResponseTypeDocument && responseIsHTML()) { 1458 if (m_responseTypeCode == ResponseTypeDocument && responseIsHTML()) {
1461 parseDocumentChunk(data, len); 1459 parseDocumentChunk(data, len);
1462 } else if (m_responseTypeCode == ResponseTypeDefault || m_responseTypeCode = = ResponseTypeText || m_responseTypeCode == ResponseTypeJSON || m_responseTypeCo de == ResponseTypeDocument) { 1460 } else if (m_responseTypeCode == ResponseTypeDefault || m_responseTypeCode = = ResponseTypeText || m_responseTypeCode == ResponseTypeJSON || m_responseTypeCo de == ResponseTypeDocument) {
1463 if (!m_decoder) 1461 if (!m_decoder)
1464 m_decoder = createDecoder(); 1462 m_decoder = createDecoder();
1465 1463
1466 m_responseText = m_responseText.concatenateWith(m_decoder->decode(data, len)); 1464 m_responseText = m_responseText.concatenateWith(m_decoder->decode(data, len));
1467 } else if (m_responseTypeCode == ResponseTypeArrayBuffer || m_responseTypeCo de == ResponseTypeBlob) { 1465 } else if (m_responseTypeCode == ResponseTypeArrayBuffer || m_responseTypeCo de == ResponseTypeBlob) {
1468 // Buffer binary data. 1466 // Buffer binary data.
1469 if (!m_binaryResponseBuilder) 1467 if (!m_binaryResponseBuilder)
1470 m_binaryResponseBuilder = SharedBuffer::create(); 1468 m_binaryResponseBuilder = SharedBuffer::create();
1471 m_binaryResponseBuilder->append(data, len); 1469 m_binaryResponseBuilder->append(data, len);
1472 } else if (m_responseTypeCode == ResponseTypeLegacyStream) { 1470 } else if (m_responseTypeCode == ResponseTypeLegacyStream) {
1473 if (!m_responseLegacyStream) 1471 if (!m_responseLegacyStream)
1474 m_responseLegacyStream = Stream::create(executionContext(), response Type()); 1472 m_responseLegacyStream = Stream::create(executionContext(), response Type());
1475 m_responseLegacyStream->addData(data, len); 1473 m_responseLegacyStream->addData(data, len);
1476 } else if (m_responseTypeCode == ResponseTypeStream) { 1474 } else if (m_responseTypeCode == ResponseTypeStream) {
1477 if (!m_responseStream) { 1475 if (!m_responseStream) {
1478 m_responseStream = new ReadableStreamImpl<ReadableStreamChunkTypeTra its<ArrayBuffer> >(executionContext(), new ReadableStreamSource(this)); 1476 m_responseStream = new ReadableStreamImpl<ReadableStreamChunkTypeTra its<ArrayBuffer> >(executionContext(), new ReadableStreamSource(this));
1479 m_responseStream->didSourceStart(); 1477 m_responseStream->didSourceStart();
1480 } 1478 }
1481 m_responseStream->enqueue(ArrayBuffer::create(data, len)); 1479 m_responseStream->enqueue(ArrayBuffer::create(data, len));
1482 } 1480 }
1483 1481
1482 ASSERT(len <= INT_MAX);
1483
1484 trackProgress(len); 1484 trackProgress(len);
1485 } 1485 }
1486 1486
1487 void XMLHttpRequest::didDownloadData(int dataLength) 1487 void XMLHttpRequest::didDownloadData(int dataLength)
1488 { 1488 {
1489 if (m_error) 1489 if (m_error)
1490 return; 1490 return;
1491 1491
1492 ASSERT(m_downloadingToFile); 1492 ASSERT(m_downloadingToFile);
1493 1493
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1570 visitor->trace(m_responseStream); 1570 visitor->trace(m_responseStream);
1571 visitor->trace(m_streamSource); 1571 visitor->trace(m_streamSource);
1572 visitor->trace(m_responseDocument); 1572 visitor->trace(m_responseDocument);
1573 visitor->trace(m_responseDocumentParser); 1573 visitor->trace(m_responseDocumentParser);
1574 visitor->trace(m_progressEventThrottle); 1574 visitor->trace(m_progressEventThrottle);
1575 visitor->trace(m_upload); 1575 visitor->trace(m_upload);
1576 XMLHttpRequestEventTarget::trace(visitor); 1576 XMLHttpRequestEventTarget::trace(visitor);
1577 } 1577 }
1578 1578
1579 } // namespace blink 1579 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698