Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Bug 1361197 - Don't skip first RDN in CERT_CompareName() r=franziskus
  • Loading branch information
Tim Taubert committed Jun 6, 2017
1 parent 695e39a commit 521fc92
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 18 deletions.
43 changes: 39 additions & 4 deletions gtests/certdb_gtest/alg1485_unittest.cc
Expand Up @@ -18,8 +18,20 @@ typedef struct AVATestValuesStr {
bool expectedResult;
} AVATestValues;

class Alg1485Test : public ::testing::Test,
public ::testing::WithParamInterface<AVATestValues> {};
typedef struct AVACompareValuesStr {
std::string avaString1;
std::string avaString2;
SECComparison expectedResult;
} AVACompareValues;

class Alg1485Test : public ::testing::Test {};

class Alg1485ParseTest : public Alg1485Test,
public ::testing::WithParamInterface<AVATestValues> {};

class Alg1485CompareTest
: public Alg1485Test,
public ::testing::WithParamInterface<AVACompareValues> {};

static const AVATestValues kAVATestStrings[] = {
{"CN=Marshall T. Rose, O=Dover Beach Consulting, L=Santa Clara, "
Expand All @@ -45,13 +57,36 @@ static const AVATestValues kAVATestStrings[] = {
// { "CN=Somebody,L=Set,O=Up,C=US,01=The,02=Bomb", false },
};

TEST_P(Alg1485Test, TryParsingAVAStrings) {
static const AVACompareValues kAVACompareStrings[] = {
{"CN=Max, O=Mozilla, ST=Berlin", "CN=Max, O=Mozilla, ST=Berlin, C=DE",
SECLessThan},
{"CN=Max, O=Mozilla, ST=Berlin, C=DE", "CN=Max, O=Mozilla, ST=Berlin",
SECGreaterThan},
{"CN=Max, O=Mozilla, ST=Berlin, C=DE", "CN=Max, O=Mozilla, ST=Berlin, C=DE",
SECEqual},
{"CN=Max1, O=Mozilla, ST=Berlin, C=DE",
"CN=Max2, O=Mozilla, ST=Berlin, C=DE", SECLessThan},
{"CN=Max, O=Mozilla, ST=Berlin, C=DE", "CN=Max, O=Mozilla, ST=Berlin, C=US",
SECLessThan},
};

TEST_P(Alg1485ParseTest, TryParsingAVAStrings) {
const AVATestValues& param(GetParam());

ScopedCERTName certName(CERT_AsciiToName(param.avaString.c_str()));
ASSERT_EQ(certName != nullptr, param.expectedResult);
}

INSTANTIATE_TEST_CASE_P(ParseAVAStrings, Alg1485Test,
TEST_P(Alg1485CompareTest, CompareAVAStrings) {
const AVACompareValues& param(GetParam());
ScopedCERTName a(CERT_AsciiToName(param.avaString1.c_str()));
ScopedCERTName b(CERT_AsciiToName(param.avaString2.c_str()));
ASSERT_TRUE(a && b);
EXPECT_EQ(param.expectedResult, CERT_CompareName(a.get(), b.get()));
}

INSTANTIATE_TEST_CASE_P(ParseAVAStrings, Alg1485ParseTest,
::testing::ValuesIn(kAVATestStrings));
INSTANTIATE_TEST_CASE_P(CompareAVAStrings, Alg1485CompareTest,
::testing::ValuesIn(kAVACompareStrings));
}
18 changes: 4 additions & 14 deletions lib/certdb/secname.c
Expand Up @@ -568,8 +568,8 @@ CERT_CompareRDN(const CERTRDN *a, const CERTRDN *b)
SECComparison
CERT_CompareName(const CERTName *a, const CERTName *b)
{
CERTRDN **ardns, *ardn;
CERTRDN **brdns, *brdn;
CERTRDN **ardns;
CERTRDN **brdns;
int ac, bc;
SECComparison rv = SECEqual;

Expand All @@ -587,18 +587,8 @@ CERT_CompareName(const CERTName *a, const CERTName *b)
if (ac > bc)
return SECGreaterThan;

for (;;) {
if (!ardns++ || !brdns++) {
break;
}
ardn = *ardns;
brdn = *brdns;
if (!ardn) {
break;
}
rv = CERT_CompareRDN(ardn, brdn);
if (rv)
return rv;
while (rv == SECEqual && *ardns) {
rv = CERT_CompareRDN(*ardns++, *brdns++);
}
return rv;
}
Expand Down

0 comments on commit 521fc92

Please sign in to comment.