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

Side by Side Diff: net/dns/dns_config_service_win_unittest.cc

Issue 1132333003: Fix uninitialized reads in DnsConfigServiceWin tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « net/dns/dns_config_service_win.h ('k') | no next file » | 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/dns/dns_config_service_win.h" 5 #include "net/dns/dns_config_service_win.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/win/windows_version.h" 9 #include "base/win/windows_version.h"
10 #include "net/dns/dns_protocol.h" 10 #include "net/dns/dns_protocol.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 namespace net { 13 namespace net {
14 14
15 namespace { 15 namespace {
16 16
17 // Some simple structs without constructors to enable brace style
18 // initialization in these tests.
19 struct RegStringInit {
20 internal::DnsSystemSettings::RegString toRegString() const {
21 internal::DnsSystemSettings::RegString regString;
22 regString.set = set;
23 regString.value = value;
24 return regString;
25 }
26
27 bool set;
28 base::string16 value;
29 };
30
31 struct RegDwordInit {
32 internal::DnsSystemSettings::RegDword toRegDword() const {
33 internal::DnsSystemSettings::RegDword regDword;
34 regDword.set = set;
35 regDword.value = value;
36 return regDword;
37 }
38
39 bool set;
40 DWORD value;
41 };
42
43 struct DevolutionSettingInit {
44 internal::DnsSystemSettings::DevolutionSetting toDevolutionSetting() const {
45 internal::DnsSystemSettings::DevolutionSetting setting;
46 setting.enabled = enabled.toRegDword();
47 setting.level = level.toRegDword();
48 return setting;
49 }
50
51 RegDwordInit enabled;
52 RegDwordInit level;
53 };
54
17 TEST(DnsConfigServiceWinTest, ParseSearchList) { 55 TEST(DnsConfigServiceWinTest, ParseSearchList) {
18 const struct TestCase { 56 const struct TestCase {
19 const wchar_t* input; 57 const wchar_t* input;
20 const char* output[4]; // NULL-terminated, empty if expected false 58 const char* output[4]; // NULL-terminated, empty if expected false
21 } cases[] = { 59 } cases[] = {
22 { L"chromium.org", { "chromium.org", NULL } }, 60 { L"chromium.org", { "chromium.org", NULL } },
23 { L"chromium.org,org", { "chromium.org", "org", NULL } }, 61 { L"chromium.org,org", { "chromium.org", "org", NULL } },
24 // Empty suffixes terminate the list 62 // Empty suffixes terminate the list
25 { L"crbug.com,com,,org", { "crbug.com", "com", NULL } }, 63 { L"crbug.com,com,,org", { "crbug.com", "com", NULL } },
26 // IDN are converted to punycode 64 // IDN are converted to punycode
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 } 236 }
199 237
200 TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) { 238 TEST(DnsConfigServiceWinTest, ConvertSuffixSearch) {
201 AdapterInfo infos[2] = { 239 AdapterInfo infos[2] = {
202 { IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", { "1.0.0.1" } }, 240 { IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", { "1.0.0.1" } },
203 { 0 }, 241 { 0 },
204 }; 242 };
205 243
206 const struct TestCase { 244 const struct TestCase {
207 struct { 245 struct {
208 internal::DnsSystemSettings::RegString policy_search_list; 246 RegStringInit policy_search_list;
209 internal::DnsSystemSettings::RegString tcpip_search_list; 247 RegStringInit tcpip_search_list;
210 internal::DnsSystemSettings::RegString tcpip_domain; 248 RegStringInit tcpip_domain;
211 internal::DnsSystemSettings::RegString primary_dns_suffix; 249 RegStringInit primary_dns_suffix;
212 internal::DnsSystemSettings::DevolutionSetting policy_devolution; 250 DevolutionSettingInit policy_devolution;
213 internal::DnsSystemSettings::DevolutionSetting dnscache_devolution; 251 DevolutionSettingInit dnscache_devolution;
214 internal::DnsSystemSettings::DevolutionSetting tcpip_devolution; 252 DevolutionSettingInit tcpip_devolution;
215 } input_settings; 253 } input_settings;
216 std::string expected_search[5]; 254 std::string expected_search[5];
217 } cases[] = { 255 } cases[] = {
218 { // Policy SearchList override. 256 { // Policy SearchList override.
219 { 257 {
220 { true, L"policy.searchlist.a,policy.searchlist.b" }, 258 { true, L"policy.searchlist.a,policy.searchlist.b" },
221 { true, L"tcpip.searchlist.a,tcpip.searchlist.b" }, 259 { true, L"tcpip.searchlist.a,tcpip.searchlist.b" },
222 { true, L"tcpip.domain" }, 260 { true, L"tcpip.domain" },
223 { true, L"primary.dns.suffix" }, 261 { true, L"primary.dns.suffix" },
Nico 2015/05/11 04:08:29 Huh, I thought that using a brace initializer for
benwells 2015/05/11 05:12:38 The problem was elsewhere, with these changes fall
224 }, 262 },
225 { "policy.searchlist.a", "policy.searchlist.b" }, 263 { "policy.searchlist.a", "policy.searchlist.b" },
226 }, 264 },
227 { // User-specified SearchList override. 265 { // User-specified SearchList override.
228 { 266 {
229 { false }, 267 { false },
230 { true, L"tcpip.searchlist.a,tcpip.searchlist.b" }, 268 { true, L"tcpip.searchlist.a,tcpip.searchlist.b" },
231 { true, L"tcpip.domain" }, 269 { true, L"tcpip.domain" },
232 { true, L"primary.dns.suffix" }, 270 { true, L"primary.dns.suffix" },
233 }, 271 },
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 { { false }, { true, 3 } }, 400 { { false }, { true, 3 } },
363 { { true, 0 }, { true, 3 } }, 401 { { true, 0 }, { true, 3 } },
364 }, 402 },
365 { "a.b.c.d.e", "connection.suffix" }, 403 { "a.b.c.d.e", "connection.suffix" },
366 }, 404 },
367 }; 405 };
368 406
369 for (auto& t : cases) { 407 for (auto& t : cases) {
370 internal::DnsSystemSettings settings; 408 internal::DnsSystemSettings settings;
371 settings.addresses = CreateAdapterAddresses(infos); 409 settings.addresses = CreateAdapterAddresses(infos);
372 settings.policy_search_list = t.input_settings.policy_search_list; 410 settings.policy_search_list =
373 settings.tcpip_search_list = t.input_settings.tcpip_search_list; 411 t.input_settings.policy_search_list.toRegString();
374 settings.tcpip_domain = t.input_settings.tcpip_domain; 412 settings.tcpip_search_list =
375 settings.primary_dns_suffix = t.input_settings.primary_dns_suffix; 413 t.input_settings.tcpip_search_list.toRegString();
376 settings.policy_devolution = t.input_settings.policy_devolution; 414 settings.tcpip_domain = t.input_settings.tcpip_domain.toRegString();
377 settings.dnscache_devolution = t.input_settings.dnscache_devolution; 415 settings.primary_dns_suffix =
378 settings.tcpip_devolution = t.input_settings.tcpip_devolution; 416 t.input_settings.primary_dns_suffix.toRegString();
417 settings.policy_devolution =
418 t.input_settings.policy_devolution.toDevolutionSetting();
419 settings.dnscache_devolution =
420 t.input_settings.dnscache_devolution.toDevolutionSetting();
421 settings.tcpip_devolution =
422 t.input_settings.tcpip_devolution.toDevolutionSetting();
379 423
380 DnsConfig config; 424 DnsConfig config;
381 EXPECT_EQ(internal::CONFIG_PARSE_WIN_OK, 425 EXPECT_EQ(internal::CONFIG_PARSE_WIN_OK,
382 internal::ConvertSettingsToDnsConfig(settings, &config)); 426 internal::ConvertSettingsToDnsConfig(settings, &config));
383 std::vector<std::string> expected_search; 427 std::vector<std::string> expected_search;
384 for (size_t j = 0; !t.expected_search[j].empty(); ++j) { 428 for (size_t j = 0; !t.expected_search[j].empty(); ++j) {
385 expected_search.push_back(t.expected_search[j]); 429 expected_search.push_back(t.expected_search[j]);
386 } 430 }
387 EXPECT_EQ(expected_search, config.search); 431 EXPECT_EQ(expected_search, config.search);
388 } 432 }
389 } 433 }
390 434
391 TEST(DnsConfigServiceWinTest, AppendToMultiLabelName) { 435 TEST(DnsConfigServiceWinTest, AppendToMultiLabelName) {
392 AdapterInfo infos[2] = { 436 AdapterInfo infos[2] = {
393 { IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", { "1.0.0.1" } }, 437 { IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", { "1.0.0.1" } },
394 { 0 }, 438 { 0 },
395 }; 439 };
396 440
397 // The default setting was true pre-Vista. 441 // The default setting was true pre-Vista.
398 bool default_value = (base::win::GetVersion() < base::win::VERSION_VISTA); 442 bool default_value = (base::win::GetVersion() < base::win::VERSION_VISTA);
399 443
400 const struct TestCase { 444 const struct TestCase {
401 internal::DnsSystemSettings::RegDword input; 445 RegDwordInit input;
402 bool expected_output; 446 bool expected_output;
403 } cases[] = { 447 } cases[] = {
404 { { true, 0 }, false }, 448 { { true, 0 }, false },
405 { { true, 1 }, true }, 449 { { true, 1 }, true },
406 { { false, 0 }, default_value }, 450 { { false, 0 }, default_value },
407 }; 451 };
408 452
409 for (const auto& t : cases) { 453 for (const auto& t : cases) {
410 internal::DnsSystemSettings settings; 454 internal::DnsSystemSettings settings;
411 settings.addresses = CreateAdapterAddresses(infos); 455 settings.addresses = CreateAdapterAddresses(infos);
412 settings.append_to_multi_label_name = t.input; 456 settings.append_to_multi_label_name = t.input.toRegDword();
413 DnsConfig config; 457 DnsConfig config;
414 EXPECT_EQ(internal::CONFIG_PARSE_WIN_OK, 458 EXPECT_EQ(internal::CONFIG_PARSE_WIN_OK,
415 internal::ConvertSettingsToDnsConfig(settings, &config)); 459 internal::ConvertSettingsToDnsConfig(settings, &config));
416 EXPECT_EQ(t.expected_output, config.append_to_multi_label_name); 460 EXPECT_EQ(t.expected_output, config.append_to_multi_label_name);
417 } 461 }
418 } 462 }
419 463
420 // Setting have_name_resolution_policy_table should set unhandled_options. 464 // Setting have_name_resolution_policy_table should set unhandled_options.
421 TEST(DnsConfigServiceWinTest, HaveNRPT) { 465 TEST(DnsConfigServiceWinTest, HaveNRPT) {
422 AdapterInfo infos[2] = { 466 AdapterInfo infos[2] = {
423 { IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", { "1.0.0.1" } }, 467 { IF_TYPE_USB, IfOperStatusUp, L"connection.suffix", { "1.0.0.1" } },
424 { 0 }, 468 { 0 },
425 }; 469 };
426 470
427 const struct TestCase { 471 const struct TestCase {
428 bool have_nrpt; 472 bool have_nrpt;
429 bool unhandled_options; 473 bool unhandled_options;
430 internal::ConfigParseWinResult result; 474 internal::ConfigParseWinResult result;
431 } cases[] = { 475 } cases[] = {
432 { false, false, internal::CONFIG_PARSE_WIN_OK }, 476 { false, false, internal::CONFIG_PARSE_WIN_OK },
433 { true, true, internal::CONFIG_PARSE_WIN_UNHANDLED_OPTIONS }, 477 { true, true, internal::CONFIG_PARSE_WIN_UNHANDLED_OPTIONS },
434 }; 478 };
435 479
436 for (const auto& t : cases) { 480 for (const auto& t : cases) {
437 internal::DnsSystemSettings settings; 481 internal::DnsSystemSettings settings;
438 settings.addresses = CreateAdapterAddresses(infos); 482 settings.addresses = CreateAdapterAddresses(infos);
439 settings.have_name_resolution_policy = t.have_nrpt; 483 settings.have_name_resolution_policy = t.have_nrpt;
440 DnsConfig config; 484 DnsConfig config;
441 EXPECT_EQ(t.result, 485 EXPECT_EQ(t.result,
442 internal::ConvertSettingsToDnsConfig(settings, &config)); 486 internal::ConvertSettingsToDnsConfig(settings, &config));
benwells 2015/05/11 05:12:38 This was the line causing the error that I investi
443 EXPECT_EQ(t.unhandled_options, config.unhandled_options); 487 EXPECT_EQ(t.unhandled_options, config.unhandled_options);
444 EXPECT_EQ(t.have_nrpt, config.use_local_ipv6); 488 EXPECT_EQ(t.have_nrpt, config.use_local_ipv6);
445 } 489 }
446 } 490 }
447 491
448 492
449 } // namespace 493 } // namespace
450 494
451 } // namespace net 495 } // namespace net
452 496
OLDNEW
« no previous file with comments | « net/dns/dns_config_service_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698