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

Unified Diff: net/url_request/url_request_unittest.cc

Issue 1732493002: Prevent URLFetcher::AppendChunkedData from dereferencing NULL pointers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge Created 4 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 side-by-side diff with in-line comments
Download patch
« net/url_request/url_fetcher_core.cc ('K') | « net/url_request/url_request.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/url_request/url_request_unittest.cc
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 68e999743c71f0d836f335f787e235ea462492f6..fed3fc289603d7421537ef1f13b70b40b9e7e6ef 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -3300,30 +3300,6 @@ class URLRequestTestHTTP : public URLRequestTest {
delete[] uploadBytes;
}
- void AddChunksToUpload(URLRequest* r) {
- r->AppendChunkToUpload("a", 1, false);
- r->AppendChunkToUpload("bcd", 3, false);
- r->AppendChunkToUpload("this is a longer chunk than before.", 35, false);
- r->AppendChunkToUpload("\r\n\r\n", 4, false);
- r->AppendChunkToUpload("0", 1, false);
- r->AppendChunkToUpload("2323", 4, true);
- }
-
- void VerifyReceivedDataMatchesChunks(URLRequest* r, TestDelegate* d) {
- // This should match the chunks sent by AddChunksToUpload().
- const std::string expected_data =
- "abcdthis is a longer chunk than before.\r\n\r\n02323";
-
- ASSERT_EQ(1, d->response_started_count())
- << "request failed: " << r->status().status()
- << ", os error: " << r->status().error();
-
- EXPECT_FALSE(d->received_data_before_response());
-
- EXPECT_EQ(expected_data.size(), static_cast<size_t>(d->bytes_received()));
- EXPECT_EQ(expected_data, d->data_received());
- }
-
bool DoManyCookiesRequest(int num_cookies) {
TestDelegate d;
scoped_ptr<URLRequest> r(default_context_.CreateRequest(
@@ -5725,6 +5701,38 @@ TEST_F(URLRequestTestHTTP, PostUnreadableFileTest) {
}
}
+namespace {
+
+// Add a standard set of data to an upload for chunked upload integration
+// tests.
+void AddDataToUpload(ChunkedUploadDataStream::Writer* writer) {
+ writer->AppendData("a", 1, false);
+ writer->AppendData("bcd", 3, false);
+ writer->AppendData("this is a longer chunk than before.", 35, false);
+ writer->AppendData("\r\n\r\n", 4, false);
+ writer->AppendData("0", 1, false);
+ writer->AppendData("2323", 4, true);
+}
+
+// Check that the upload data added in AddChunksToUpload() was echoed back from
+// the server.
+void VerifyReceivedDataMatchesChunks(URLRequest* r, TestDelegate* d) {
+ // This should match the chunks sent by AddChunksToUpload().
+ const std::string expected_data =
+ "abcdthis is a longer chunk than before.\r\n\r\n02323";
+
+ ASSERT_EQ(1, d->response_started_count())
+ << "request failed: " << r->status().status()
+ << ", os error: " << r->status().error();
+
+ EXPECT_FALSE(d->received_data_before_response());
+
+ EXPECT_EQ(expected_data.size(), static_cast<size_t>(d->bytes_received()));
+ EXPECT_EQ(expected_data, d->data_received());
+}
+
+} // namespace
+
TEST_F(URLRequestTestHTTP, TestPostChunkedDataBeforeStart) {
ASSERT_TRUE(http_test_server()->Start());
@@ -5732,9 +5740,13 @@ TEST_F(URLRequestTestHTTP, TestPostChunkedDataBeforeStart) {
{
scoped_ptr<URLRequest> r(default_context_.CreateRequest(
http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
- r->EnableChunkedUpload();
+ scoped_ptr<ChunkedUploadDataStream> upload_data_stream(
+ new ChunkedUploadDataStream(0));
+ scoped_ptr<ChunkedUploadDataStream::Writer> writer =
+ upload_data_stream->CreateWriter();
+ r->set_upload(make_scoped_ptr(upload_data_stream.release()));
r->set_method("POST");
- AddChunksToUpload(r.get());
+ AddDataToUpload(writer.get());
r->Start();
EXPECT_TRUE(r->is_pending());
@@ -5751,11 +5763,15 @@ TEST_F(URLRequestTestHTTP, TestPostChunkedDataJustAfterStart) {
{
scoped_ptr<URLRequest> r(default_context_.CreateRequest(
http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
- r->EnableChunkedUpload();
+ scoped_ptr<ChunkedUploadDataStream> upload_data_stream(
+ new ChunkedUploadDataStream(0));
+ scoped_ptr<ChunkedUploadDataStream::Writer> writer =
+ upload_data_stream->CreateWriter();
+ r->set_upload(make_scoped_ptr(upload_data_stream.release()));
r->set_method("POST");
r->Start();
EXPECT_TRUE(r->is_pending());
- AddChunksToUpload(r.get());
+ AddDataToUpload(writer.get());
base::RunLoop().Run();
VerifyReceivedDataMatchesChunks(r.get(), &d);
@@ -5769,13 +5785,17 @@ TEST_F(URLRequestTestHTTP, TestPostChunkedDataAfterStart) {
{
scoped_ptr<URLRequest> r(default_context_.CreateRequest(
http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
- r->EnableChunkedUpload();
+ scoped_ptr<ChunkedUploadDataStream> upload_data_stream(
+ new ChunkedUploadDataStream(0));
+ scoped_ptr<ChunkedUploadDataStream::Writer> writer =
+ upload_data_stream->CreateWriter();
+ r->set_upload(make_scoped_ptr(upload_data_stream.release()));
mef 2016/03/08 17:19:22 would std::move work here?
mmenke 2016/03/09 17:27:15 Done.
r->set_method("POST");
r->Start();
EXPECT_TRUE(r->is_pending());
base::RunLoop().RunUntilIdle();
- AddChunksToUpload(r.get());
+ AddDataToUpload(writer.get());
base::RunLoop().Run();
VerifyReceivedDataMatchesChunks(r.get(), &d);
« net/url_request/url_fetcher_core.cc ('K') | « net/url_request/url_request.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698