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

Side by Side Diff: net/cert/multi_threaded_cert_verifier_unittest.cc

Issue 16480002: Fix some potential after free errors on TestCompletionCallback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remediate to review Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | net/http/http_cache_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "net/cert/multi_threaded_cert_verifier.h" 5 #include "net/cert/multi_threaded_cert_verifier.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 88
89 error = verifier_.Verify(test_cert.get(), 89 error = verifier_.Verify(test_cert.get(),
90 "www.example.com", 90 "www.example.com",
91 0, 91 0,
92 NULL, 92 NULL,
93 &verify_result, 93 &verify_result,
94 callback.callback(), 94 callback.callback(),
95 &request_handle, 95 &request_handle,
96 BoundNetLog()); 96 BoundNetLog());
97 ASSERT_EQ(ERR_IO_PENDING, error); 97 ASSERT_EQ(ERR_IO_PENDING, error);
98 ASSERT_TRUE(request_handle != NULL); 98 EXPECT_TRUE(request_handle);
99 error = callback.WaitForResult(); 99 error = callback.WaitForResult();
100 ASSERT_TRUE(IsCertificateError(error)); 100 ASSERT_TRUE(IsCertificateError(error));
101 ASSERT_EQ(1u, verifier_.requests()); 101 ASSERT_EQ(1u, verifier_.requests());
102 ASSERT_EQ(0u, verifier_.cache_hits()); 102 ASSERT_EQ(0u, verifier_.cache_hits());
103 ASSERT_EQ(0u, verifier_.inflight_joins()); 103 ASSERT_EQ(0u, verifier_.inflight_joins());
104 ASSERT_EQ(1u, verifier_.GetCacheSize()); 104 ASSERT_EQ(1u, verifier_.GetCacheSize());
105 105
106 error = verifier_.Verify(test_cert.get(), 106 error = verifier_.Verify(test_cert.get(),
107 "www.example.com", 107 "www.example.com",
108 0, 108 0,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 158
159 error = verifier_.Verify(cert_chain1.get(), 159 error = verifier_.Verify(cert_chain1.get(),
160 "www.example.com", 160 "www.example.com",
161 0, 161 0,
162 NULL, 162 NULL,
163 &verify_result, 163 &verify_result,
164 callback.callback(), 164 callback.callback(),
165 &request_handle, 165 &request_handle,
166 BoundNetLog()); 166 BoundNetLog());
167 ASSERT_EQ(ERR_IO_PENDING, error); 167 ASSERT_EQ(ERR_IO_PENDING, error);
168 ASSERT_TRUE(request_handle != NULL); 168 EXPECT_TRUE(request_handle);
169 error = callback.WaitForResult(); 169 error = callback.WaitForResult();
170 ASSERT_TRUE(IsCertificateError(error)); 170 ASSERT_TRUE(IsCertificateError(error));
171 ASSERT_EQ(1u, verifier_.requests()); 171 ASSERT_EQ(1u, verifier_.requests());
172 ASSERT_EQ(0u, verifier_.cache_hits()); 172 ASSERT_EQ(0u, verifier_.cache_hits());
173 ASSERT_EQ(0u, verifier_.inflight_joins()); 173 ASSERT_EQ(0u, verifier_.inflight_joins());
174 ASSERT_EQ(1u, verifier_.GetCacheSize()); 174 ASSERT_EQ(1u, verifier_.GetCacheSize());
175 175
176 error = verifier_.Verify(cert_chain2.get(), 176 error = verifier_.Verify(cert_chain2.get(),
177 "www.example.com", 177 "www.example.com",
178 0, 178 0,
179 NULL, 179 NULL,
180 &verify_result, 180 &verify_result,
181 callback.callback(), 181 callback.callback(),
182 &request_handle, 182 &request_handle,
183 BoundNetLog()); 183 BoundNetLog());
184 ASSERT_EQ(ERR_IO_PENDING, error); 184 ASSERT_EQ(ERR_IO_PENDING, error);
185 ASSERT_TRUE(request_handle != NULL); 185 EXPECT_TRUE(request_handle);
186 error = callback.WaitForResult(); 186 error = callback.WaitForResult();
187 ASSERT_TRUE(IsCertificateError(error)); 187 ASSERT_TRUE(IsCertificateError(error));
188 ASSERT_EQ(2u, verifier_.requests()); 188 ASSERT_EQ(2u, verifier_.requests());
189 ASSERT_EQ(0u, verifier_.cache_hits()); 189 ASSERT_EQ(0u, verifier_.cache_hits());
190 ASSERT_EQ(0u, verifier_.inflight_joins()); 190 ASSERT_EQ(0u, verifier_.inflight_joins());
191 ASSERT_EQ(2u, verifier_.GetCacheSize()); 191 ASSERT_EQ(2u, verifier_.GetCacheSize());
192 } 192 }
193 193
194 // Tests an inflight join. 194 // Tests an inflight join.
195 TEST_F(MultiThreadedCertVerifierTest, InflightJoin) { 195 TEST_F(MultiThreadedCertVerifierTest, InflightJoin) {
(...skipping 12 matching lines...) Expand all
208 208
209 error = verifier_.Verify(test_cert.get(), 209 error = verifier_.Verify(test_cert.get(),
210 "www.example.com", 210 "www.example.com",
211 0, 211 0,
212 NULL, 212 NULL,
213 &verify_result, 213 &verify_result,
214 callback.callback(), 214 callback.callback(),
215 &request_handle, 215 &request_handle,
216 BoundNetLog()); 216 BoundNetLog());
217 ASSERT_EQ(ERR_IO_PENDING, error); 217 ASSERT_EQ(ERR_IO_PENDING, error);
218 ASSERT_TRUE(request_handle != NULL); 218 EXPECT_TRUE(request_handle);
219 error = verifier_.Verify(test_cert.get(), 219 error = verifier_.Verify(test_cert.get(),
220 "www.example.com", 220 "www.example.com",
221 0, 221 0,
222 NULL, 222 NULL,
223 &verify_result2, 223 &verify_result2,
224 callback2.callback(), 224 callback2.callback(),
225 &request_handle2, 225 &request_handle2,
226 BoundNetLog()); 226 BoundNetLog());
227 ASSERT_EQ(ERR_IO_PENDING, error); 227 EXPECT_EQ(ERR_IO_PENDING, error);
228 ASSERT_TRUE(request_handle2 != NULL); 228 EXPECT_TRUE(request_handle2 != NULL);
229 error = callback.WaitForResult(); 229 error = callback.WaitForResult();
230 ASSERT_TRUE(IsCertificateError(error)); 230 EXPECT_TRUE(IsCertificateError(error));
231 error = callback2.WaitForResult(); 231 error = callback2.WaitForResult();
232 ASSERT_TRUE(IsCertificateError(error)); 232 ASSERT_TRUE(IsCertificateError(error));
233 ASSERT_EQ(2u, verifier_.requests()); 233 ASSERT_EQ(2u, verifier_.requests());
234 ASSERT_EQ(0u, verifier_.cache_hits()); 234 ASSERT_EQ(0u, verifier_.cache_hits());
235 ASSERT_EQ(1u, verifier_.inflight_joins()); 235 ASSERT_EQ(1u, verifier_.inflight_joins());
236 } 236 }
237 237
238 // Tests that the callback of a canceled request is never made. 238 // Tests that the callback of a canceled request is never made.
239 TEST_F(MultiThreadedCertVerifierTest, CancelRequest) { 239 TEST_F(MultiThreadedCertVerifierTest, CancelRequest) {
240 base::FilePath certs_dir = GetTestCertsDirectory(); 240 base::FilePath certs_dir = GetTestCertsDirectory();
(...skipping 24 matching lines...) Expand all
265 for (int i = 0; i < 5; ++i) { 265 for (int i = 0; i < 5; ++i) {
266 error = verifier_.Verify(test_cert.get(), 266 error = verifier_.Verify(test_cert.get(),
267 "www2.example.com", 267 "www2.example.com",
268 0, 268 0,
269 NULL, 269 NULL,
270 &verify_result, 270 &verify_result,
271 callback.callback(), 271 callback.callback(),
272 &request_handle, 272 &request_handle,
273 BoundNetLog()); 273 BoundNetLog());
274 ASSERT_EQ(ERR_IO_PENDING, error); 274 ASSERT_EQ(ERR_IO_PENDING, error);
275 ASSERT_TRUE(request_handle != NULL); 275 EXPECT_TRUE(request_handle);
276 error = callback.WaitForResult(); 276 error = callback.WaitForResult();
277 verifier_.ClearCache(); 277 verifier_.ClearCache();
278 } 278 }
279 } 279 }
280 280
281 // Tests that a canceled request is not leaked. 281 // Tests that a canceled request is not leaked.
282 TEST_F(MultiThreadedCertVerifierTest, CancelRequestThenQuit) { 282 TEST_F(MultiThreadedCertVerifierTest, CancelRequestThenQuit) {
283 base::FilePath certs_dir = GetTestCertsDirectory(); 283 base::FilePath certs_dir = GetTestCertsDirectory();
284 scoped_refptr<X509Certificate> test_cert( 284 scoped_refptr<X509Certificate> test_cert(
285 ImportCertFromFile(certs_dir, "ok_cert.pem")); 285 ImportCertFromFile(certs_dir, "ok_cert.pem"));
286 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert); 286 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert);
287 287
288 int error; 288 int error;
289 CertVerifyResult verify_result; 289 CertVerifyResult verify_result;
290 TestCompletionCallback callback; 290 TestCompletionCallback callback;
291 CertVerifier::RequestHandle request_handle; 291 CertVerifier::RequestHandle request_handle;
292 292
293 error = verifier_.Verify(test_cert.get(), 293 error = verifier_.Verify(test_cert.get(),
294 "www.example.com", 294 "www.example.com",
295 0, 295 0,
296 NULL, 296 NULL,
297 &verify_result, 297 &verify_result,
298 callback.callback(), 298 callback.callback(),
299 &request_handle, 299 &request_handle,
300 BoundNetLog()); 300 BoundNetLog());
301 ASSERT_EQ(ERR_IO_PENDING, error); 301 ASSERT_EQ(ERR_IO_PENDING, error);
302 ASSERT_TRUE(request_handle != NULL); 302 EXPECT_TRUE(request_handle);
303 verifier_.CancelRequest(request_handle); 303 verifier_.CancelRequest(request_handle);
304 // Destroy |verifier| by going out of scope. 304 // Destroy |verifier| by going out of scope.
305 } 305 }
306 306
307 TEST_F(MultiThreadedCertVerifierTest, RequestParamsComparators) { 307 TEST_F(MultiThreadedCertVerifierTest, RequestParamsComparators) {
308 SHA1HashValue a_key; 308 SHA1HashValue a_key;
309 memset(a_key.data, 'a', sizeof(a_key.data)); 309 memset(a_key.data, 'a', sizeof(a_key.data));
310 310
311 SHA1HashValue z_key; 311 SHA1HashValue z_key;
312 memset(z_key.data, 'z', sizeof(z_key.data)); 312 memset(z_key.data, 'z', sizeof(z_key.data));
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 error = verifier_.Verify(test_cert.get(), 425 error = verifier_.Verify(test_cert.get(),
426 "www.example.com", 426 "www.example.com",
427 0, 427 0,
428 NULL, 428 NULL,
429 &verify_result, 429 &verify_result,
430 callback.callback(), 430 callback.callback(),
431 &request_handle, 431 &request_handle,
432 BoundNetLog()); 432 BoundNetLog());
433 Mock::VerifyAndClearExpectations(&trust_provider); 433 Mock::VerifyAndClearExpectations(&trust_provider);
434 ASSERT_EQ(ERR_IO_PENDING, error); 434 ASSERT_EQ(ERR_IO_PENDING, error);
435 ASSERT_TRUE(request_handle); 435 EXPECT_TRUE(request_handle);
436 error = callback.WaitForResult(); 436 error = callback.WaitForResult();
437 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); 437 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error);
438 ASSERT_EQ(1u, verifier_.requests()); 438 ASSERT_EQ(1u, verifier_.requests());
439 ASSERT_EQ(0u, verifier_.cache_hits()); 439 ASSERT_EQ(0u, verifier_.cache_hits());
440 440
441 // The next Verify() uses the cached result. 441 // The next Verify() uses the cached result.
442 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors()) 442 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors())
443 .WillOnce(ReturnRef(empty_cert_list)); 443 .WillOnce(ReturnRef(empty_cert_list));
444 error = verifier_.Verify(test_cert.get(), 444 error = verifier_.Verify(test_cert.get(),
445 "www.example.com", 445 "www.example.com",
(...skipping 16 matching lines...) Expand all
462 error = verifier_.Verify(test_cert.get(), 462 error = verifier_.Verify(test_cert.get(),
463 "www.example.com", 463 "www.example.com",
464 0, 464 0,
465 NULL, 465 NULL,
466 &verify_result, 466 &verify_result,
467 callback.callback(), 467 callback.callback(),
468 &request_handle, 468 &request_handle,
469 BoundNetLog()); 469 BoundNetLog());
470 Mock::VerifyAndClearExpectations(&trust_provider); 470 Mock::VerifyAndClearExpectations(&trust_provider);
471 ASSERT_EQ(ERR_IO_PENDING, error); 471 ASSERT_EQ(ERR_IO_PENDING, error);
472 ASSERT_TRUE(request_handle != NULL); 472 EXPECT_TRUE(request_handle);
473 error = callback.WaitForResult(); 473 error = callback.WaitForResult();
474 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); 474 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error);
475 ASSERT_EQ(3u, verifier_.requests()); 475 ASSERT_EQ(3u, verifier_.requests());
476 ASSERT_EQ(1u, verifier_.cache_hits()); 476 ASSERT_EQ(1u, verifier_.cache_hits());
477 } 477 }
478 478
479 } // namespace net 479 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/http/http_cache_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698