Skip to content

Commit 9c6150d

Browse files
author
R. Martinho Fernandes
committed
Bug 1736763 - correctly delimit ipv6 hostnames for keying certificate overrides r=keeler
Differential Revision: https://phabricator.services.mozilla.com/D136499
1 parent 352cbd5 commit 9c6150d

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

security/manager/ssl/nsCertOverrideService.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,12 +324,10 @@ nsresult nsCertOverrideService::Read(const MutexAutoLock& aProofOfLock) {
324324
Tokenizer parser(buffer);
325325
nsDependentCSubstring host;
326326
if (parser.CheckChar('[')) { // this is a IPv6 address
327-
parser.Record(Tokenizer::INCLUDE_LAST);
328327
if (!parser.ReadUntil(Tokenizer::Token::Char(']'), host) ||
329328
host.Length() == 0 || !parser.CheckChar(':')) {
330329
continue;
331330
}
332-
parser.Claim(host);
333331
} else if (!parser.ReadUntil(Tokenizer::Token::Char(':'), host) ||
334332
host.Length() == 0) {
335333
continue;
@@ -818,7 +816,16 @@ nsCertOverrideService::GetOverrides(
818816
void nsCertOverrideService::GetHostWithPort(const nsACString& aHostName,
819817
int32_t aPort,
820818
nsACString& aRetval) {
821-
nsAutoCString hostPort(aHostName);
819+
nsAutoCString hostPort;
820+
if (aHostName.Contains(':')) {
821+
// if aHostName is an IPv6 address, add brackets to match the internal
822+
// representation, which always stores IPv6 addresses with brackets
823+
hostPort.Append('[');
824+
hostPort.Append(aHostName);
825+
hostPort.Append(']');
826+
} else {
827+
hostPort.Append(aHostName);
828+
}
822829
if (aPort == -1) {
823830
aPort = 443;
824831
}

security/manager/ssl/tests/unit/test_cert_override_read.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ function run_test() {
134134
attributes: {},
135135
},
136136
{
137-
host: "[::1]",
137+
host: "::1",
138138
port: 443,
139139
cert: cert2,
140140
bits: Ci.nsICertOverrideService.ERROR_MISMATCH,

security/manager/ssl/tests/unit/test_cert_overrides.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,14 @@ function add_simple_tests() {
566566
expectedBits,
567567
false
568568
);
569+
certOverrideService.rememberValidityOverride(
570+
"::1",
571+
80,
572+
{},
573+
cert,
574+
expectedBits,
575+
false
576+
);
569577
Assert.ok(
570578
certOverrideService.hasMatchingOverride(
571579
"example.com",
@@ -596,6 +604,10 @@ function add_simple_tests() {
596604
),
597605
"Should have added override for example.org:443"
598606
);
607+
Assert.ok(
608+
certOverrideService.hasMatchingOverride("::1", 80, {}, cert, {}, {}),
609+
"Should have added override for [::1]:80"
610+
);
599611
Assert.ok(
600612
!certOverrideService.hasMatchingOverride(
601613
"example.org",

0 commit comments

Comments
 (0)