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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <utility> 5 #include <utility>
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #if defined(OS_WIN) 9 #if defined(OS_WIN)
10 #include <windows.h> 10 #include <windows.h>
(...skipping 3285 matching lines...) Expand 10 before | Expand all | Expand 10 after
3296 ASSERT_EQ(1, d.response_started_count()) 3296 ASSERT_EQ(1, d.response_started_count())
3297 << "request failed: " << r->status().status() 3297 << "request failed: " << r->status().status()
3298 << ", os error: " << r->status().error(); 3298 << ", os error: " << r->status().error();
3299 3299
3300 EXPECT_FALSE(d.received_data_before_response()); 3300 EXPECT_FALSE(d.received_data_before_response());
3301 EXPECT_EQ(uploadBytes, d.data_received()); 3301 EXPECT_EQ(uploadBytes, d.data_received());
3302 } 3302 }
3303 delete[] uploadBytes; 3303 delete[] uploadBytes;
3304 } 3304 }
3305 3305
3306 void AddChunksToUpload(URLRequest* r) {
3307 r->AppendChunkToUpload("a", 1, false);
3308 r->AppendChunkToUpload("bcd", 3, false);
3309 r->AppendChunkToUpload("this is a longer chunk than before.", 35, false);
3310 r->AppendChunkToUpload("\r\n\r\n", 4, false);
3311 r->AppendChunkToUpload("0", 1, false);
3312 r->AppendChunkToUpload("2323", 4, true);
3313 }
3314
3315 void VerifyReceivedDataMatchesChunks(URLRequest* r, TestDelegate* d) {
3316 // This should match the chunks sent by AddChunksToUpload().
3317 const std::string expected_data =
3318 "abcdthis is a longer chunk than before.\r\n\r\n02323";
3319
3320 ASSERT_EQ(1, d->response_started_count())
3321 << "request failed: " << r->status().status()
3322 << ", os error: " << r->status().error();
3323
3324 EXPECT_FALSE(d->received_data_before_response());
3325
3326 EXPECT_EQ(expected_data.size(), static_cast<size_t>(d->bytes_received()));
3327 EXPECT_EQ(expected_data, d->data_received());
3328 }
3329
3330 bool DoManyCookiesRequest(int num_cookies) { 3306 bool DoManyCookiesRequest(int num_cookies) {
3331 TestDelegate d; 3307 TestDelegate d;
3332 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 3308 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
3333 test_server_.GetURL("/set-many-cookies?" + 3309 test_server_.GetURL("/set-many-cookies?" +
3334 base::IntToString(num_cookies)), 3310 base::IntToString(num_cookies)),
3335 DEFAULT_PRIORITY, &d)); 3311 DEFAULT_PRIORITY, &d));
3336 3312
3337 r->Start(); 3313 r->Start();
3338 EXPECT_TRUE(r->is_pending()); 3314 EXPECT_TRUE(r->is_pending());
3339 3315
(...skipping 2381 matching lines...) Expand 10 before | Expand all | Expand 10 after
5721 base::RunLoop().Run(); 5697 base::RunLoop().Run();
5722 5698
5723 EXPECT_TRUE(d.request_failed()); 5699 EXPECT_TRUE(d.request_failed());
5724 EXPECT_FALSE(d.received_data_before_response()); 5700 EXPECT_FALSE(d.received_data_before_response());
5725 EXPECT_EQ(0, d.bytes_received()); 5701 EXPECT_EQ(0, d.bytes_received());
5726 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status()); 5702 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status());
5727 EXPECT_EQ(ERR_FILE_NOT_FOUND, r->status().error()); 5703 EXPECT_EQ(ERR_FILE_NOT_FOUND, r->status().error());
5728 } 5704 }
5729 } 5705 }
5730 5706
5707 namespace {
5708
5709 // Add a standard set of data to an upload for chunked upload integration
5710 // tests.
5711 void AddDataToUpload(ChunkedUploadDataStream::Writer* writer) {
5712 writer->AppendData("a", 1, false);
5713 writer->AppendData("bcd", 3, false);
5714 writer->AppendData("this is a longer chunk than before.", 35, false);
5715 writer->AppendData("\r\n\r\n", 4, false);
5716 writer->AppendData("0", 1, false);
5717 writer->AppendData("2323", 4, true);
5718 }
5719
5720 // Check that the upload data added in AddChunksToUpload() was echoed back from
5721 // the server.
5722 void VerifyReceivedDataMatchesChunks(URLRequest* r, TestDelegate* d) {
5723 // This should match the chunks sent by AddChunksToUpload().
5724 const std::string expected_data =
5725 "abcdthis is a longer chunk than before.\r\n\r\n02323";
5726
5727 ASSERT_EQ(1, d->response_started_count())
5728 << "request failed: " << r->status().status()
5729 << ", os error: " << r->status().error();
5730
5731 EXPECT_FALSE(d->received_data_before_response());
5732
5733 EXPECT_EQ(expected_data.size(), static_cast<size_t>(d->bytes_received()));
5734 EXPECT_EQ(expected_data, d->data_received());
5735 }
5736
5737 } // namespace
5738
5731 TEST_F(URLRequestTestHTTP, TestPostChunkedDataBeforeStart) { 5739 TEST_F(URLRequestTestHTTP, TestPostChunkedDataBeforeStart) {
5732 ASSERT_TRUE(http_test_server()->Start()); 5740 ASSERT_TRUE(http_test_server()->Start());
5733 5741
5734 TestDelegate d; 5742 TestDelegate d;
5735 { 5743 {
5736 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5744 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5737 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d)); 5745 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
5738 r->EnableChunkedUpload(); 5746 scoped_ptr<ChunkedUploadDataStream> upload_data_stream(
5747 new ChunkedUploadDataStream(0));
5748 scoped_ptr<ChunkedUploadDataStream::Writer> writer =
5749 upload_data_stream->CreateWriter();
5750 r->set_upload(std::move(upload_data_stream));
5739 r->set_method("POST"); 5751 r->set_method("POST");
5740 AddChunksToUpload(r.get()); 5752 AddDataToUpload(writer.get());
5741 r->Start(); 5753 r->Start();
5742 EXPECT_TRUE(r->is_pending()); 5754 EXPECT_TRUE(r->is_pending());
5743 5755
5744 base::RunLoop().Run(); 5756 base::RunLoop().Run();
5745 5757
5746 VerifyReceivedDataMatchesChunks(r.get(), &d); 5758 VerifyReceivedDataMatchesChunks(r.get(), &d);
5747 } 5759 }
5748 } 5760 }
5749 5761
5750 TEST_F(URLRequestTestHTTP, TestPostChunkedDataJustAfterStart) { 5762 TEST_F(URLRequestTestHTTP, TestPostChunkedDataJustAfterStart) {
5751 ASSERT_TRUE(http_test_server()->Start()); 5763 ASSERT_TRUE(http_test_server()->Start());
5752 5764
5753 TestDelegate d; 5765 TestDelegate d;
5754 { 5766 {
5755 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5767 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5756 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d)); 5768 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
5757 r->EnableChunkedUpload(); 5769 scoped_ptr<ChunkedUploadDataStream> upload_data_stream(
5770 new ChunkedUploadDataStream(0));
5771 scoped_ptr<ChunkedUploadDataStream::Writer> writer =
5772 upload_data_stream->CreateWriter();
5773 r->set_upload(make_scoped_ptr(upload_data_stream.release()));
5758 r->set_method("POST"); 5774 r->set_method("POST");
5759 r->Start(); 5775 r->Start();
5760 EXPECT_TRUE(r->is_pending()); 5776 EXPECT_TRUE(r->is_pending());
5761 AddChunksToUpload(r.get()); 5777 AddDataToUpload(writer.get());
5762 base::RunLoop().Run(); 5778 base::RunLoop().Run();
5763 5779
5764 VerifyReceivedDataMatchesChunks(r.get(), &d); 5780 VerifyReceivedDataMatchesChunks(r.get(), &d);
5765 } 5781 }
5766 } 5782 }
5767 5783
5768 TEST_F(URLRequestTestHTTP, TestPostChunkedDataAfterStart) { 5784 TEST_F(URLRequestTestHTTP, TestPostChunkedDataAfterStart) {
5769 ASSERT_TRUE(http_test_server()->Start()); 5785 ASSERT_TRUE(http_test_server()->Start());
5770 5786
5771 TestDelegate d; 5787 TestDelegate d;
5772 { 5788 {
5773 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5789 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5774 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d)); 5790 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
5775 r->EnableChunkedUpload(); 5791 scoped_ptr<ChunkedUploadDataStream> upload_data_stream(
5792 new ChunkedUploadDataStream(0));
5793 scoped_ptr<ChunkedUploadDataStream::Writer> writer =
5794 upload_data_stream->CreateWriter();
5795 r->set_upload(std::move(upload_data_stream));
5776 r->set_method("POST"); 5796 r->set_method("POST");
5777 r->Start(); 5797 r->Start();
5778 EXPECT_TRUE(r->is_pending()); 5798 EXPECT_TRUE(r->is_pending());
5779 5799
5780 base::RunLoop().RunUntilIdle(); 5800 base::RunLoop().RunUntilIdle();
5781 AddChunksToUpload(r.get()); 5801 AddDataToUpload(writer.get());
5782 base::RunLoop().Run(); 5802 base::RunLoop().Run();
5783 5803
5784 VerifyReceivedDataMatchesChunks(r.get(), &d); 5804 VerifyReceivedDataMatchesChunks(r.get(), &d);
5785 } 5805 }
5786 } 5806 }
5787 5807
5788 TEST_F(URLRequestTestHTTP, ResponseHeadersTest) { 5808 TEST_F(URLRequestTestHTTP, ResponseHeadersTest) {
5789 ASSERT_TRUE(http_test_server()->Start()); 5809 ASSERT_TRUE(http_test_server()->Start());
5790 5810
5791 TestDelegate d; 5811 TestDelegate d;
(...skipping 4223 matching lines...) Expand 10 before | Expand all | Expand 10 after
10015 AddTestInterceptor()->set_main_intercept_job(std::move(job)); 10035 AddTestInterceptor()->set_main_intercept_job(std::move(job));
10016 10036
10017 req->Start(); 10037 req->Start();
10018 req->Cancel(); 10038 req->Cancel();
10019 base::RunLoop().RunUntilIdle(); 10039 base::RunLoop().RunUntilIdle();
10020 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); 10040 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status());
10021 EXPECT_EQ(0, d.received_redirect_count()); 10041 EXPECT_EQ(0, d.received_redirect_count());
10022 } 10042 }
10023 10043
10024 } // namespace net 10044 } // namespace net
OLDNEW
« 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