Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit bacdfce

Browse files
committed
Bug 1557931 - Stop using ACString parameters in nsICertOverrideService. r=keeler
Differential Revision: https://phabricator.services.mozilla.com/D34274
1 parent 42379a6 commit bacdfce

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

security/manager/ssl/nsCertOverrideService.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,9 @@ nsCertOverrideService::RememberValidityOverride(const nsACString& aHostName,
336336
uint32_t aOverrideBits,
337337
bool aTemporary) {
338338
NS_ENSURE_ARG_POINTER(aCert);
339-
if (aHostName.IsEmpty()) return NS_ERROR_INVALID_ARG;
339+
if (aHostName.IsEmpty() || !IsASCII(aHostName)) {
340+
return NS_ERROR_INVALID_ARG;
341+
}
340342
if (aPort < -1) return NS_ERROR_INVALID_ARG;
341343

342344
UniqueCERTCertificate nsscert(aCert->GetCert());
@@ -389,7 +391,8 @@ NS_IMETHODIMP
389391
nsCertOverrideService::RememberTemporaryValidityOverrideUsingFingerprint(
390392
const nsACString& aHostName, int32_t aPort,
391393
const nsACString& aCertFingerprint, uint32_t aOverrideBits) {
392-
if (aCertFingerprint.IsEmpty() || aHostName.IsEmpty() || (aPort < -1)) {
394+
if (aCertFingerprint.IsEmpty() || aHostName.IsEmpty() ||
395+
!IsASCII(aCertFingerprint) || !IsASCII(aHostName) || (aPort < -1)) {
393396
return NS_ERROR_INVALID_ARG;
394397
}
395398

@@ -409,7 +412,9 @@ nsCertOverrideService::HasMatchingOverride(const nsACString& aHostName,
409412
int32_t aPort, nsIX509Cert* aCert,
410413
uint32_t* aOverrideBits,
411414
bool* aIsTemporary, bool* _retval) {
412-
if (aHostName.IsEmpty()) return NS_ERROR_INVALID_ARG;
415+
if (aHostName.IsEmpty() || !IsASCII(aHostName)) {
416+
return NS_ERROR_INVALID_ARG;
417+
}
413418
if (aPort < -1) return NS_ERROR_INVALID_ARG;
414419

415420
NS_ENSURE_ARG_POINTER(aCert);
@@ -481,6 +486,9 @@ nsresult nsCertOverrideService::AddEntryToList(
481486
NS_IMETHODIMP
482487
nsCertOverrideService::ClearValidityOverride(const nsACString& aHostName,
483488
int32_t aPort) {
489+
if (aHostName.IsEmpty() || !IsASCII(aHostName)) {
490+
return NS_ERROR_INVALID_ARG;
491+
}
484492
if (!NS_IsMainThread()) {
485493
return NS_ERROR_NOT_SAME_THREAD;
486494
}

security/manager/ssl/nsICertOverrideService.idl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ interface nsICertOverrideService : nsISupports {
5454
* @param aOverrideBits The precise set of errors we want to be overriden
5555
*/
5656
[must_use]
57-
void rememberValidityOverride(in ACString aHostName,
57+
void rememberValidityOverride(in AUTF8String aHostName,
5858
in int32_t aPort,
5959
in nsIX509Cert aCert,
6060
in uint32_t aOverrideBits,
@@ -75,9 +75,9 @@ interface nsICertOverrideService : nsISupports {
7575
*/
7676
[must_use]
7777
void rememberTemporaryValidityOverrideUsingFingerprint(
78-
in ACString aHostName,
78+
in AUTF8String aHostName,
7979
in int32_t aPort,
80-
in ACString aCertFingerprint,
80+
in AUTF8String aCertFingerprint,
8181
in uint32_t aOverrideBits);
8282

8383
/**
@@ -96,7 +96,7 @@ interface nsICertOverrideService : nsISupports {
9696
* @return Whether an override has been stored for this host+port+cert
9797
*/
9898
[must_use]
99-
boolean hasMatchingOverride(in ACString aHostName,
99+
boolean hasMatchingOverride(in AUTF8String aHostName,
100100
in int32_t aPort,
101101
in nsIX509Cert aCert,
102102
out uint32_t aOverrideBits,
@@ -111,7 +111,7 @@ interface nsICertOverrideService : nsISupports {
111111
* If it is 0 and aHostName is "all:temporary-certificates",
112112
* then all temporary certificates should be cleared.
113113
*/
114-
void clearValidityOverride(in ACString aHostName,
114+
void clearValidityOverride(in AUTF8String aHostName,
115115
in int32_t aPort);
116116

117117
/**

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,8 +312,14 @@ function add_simple_tests() {
312312
let cert = constructCertFromFile("bad_certs/idn-certificate.pem");
313313
Assert.ok(certOverrideService.hasMatchingOverride(uri.asciiHost, 8443, cert, {}, {}),
314314
"IDN certificate should have matching override using ascii host");
315-
Assert.ok(!certOverrideService.hasMatchingOverride(uri.displayHost, 8443, cert, {}, {}),
316-
"IDN certificate should not have matching override using (non-ascii) host");
315+
Assert.throws(() => !certOverrideService.hasMatchingOverride(uri.displayHost, 8443, cert, {}, {}),
316+
/NS_ERROR_ILLEGAL_VALUE/,
317+
"IDN certificate should not have matching override using (non-ascii) host");
318+
let invalidHost =
319+
uri.asciiHost.replace(/./g, c => String.fromCharCode(c.charCodeAt(0) | 0x100));
320+
Assert.throws(() => !certOverrideService.hasMatchingOverride(invalidHost, 8443, cert, {}, {}),
321+
/NS_ERROR_ILLEGAL_VALUE/,
322+
"hasMatchingOverride should not truncate high-bytes");
317323
run_next_test();
318324
});
319325

0 commit comments

Comments
 (0)