tdf#168771 Convert enum to enum class in xmlreader and xmlsecurity
Converted plain enums to enum class for better type safety: - xmlreader: Converted two local Space enums to enum class and removed redundant SPACE_ prefix from enum values (NONE, SPAN, BREAK, START) - xmlsecurity: Converted EqualMode enum to enum class - xmlsecurity: Converted local State enum in CompatDNCryptoAPI to enum class Updated all usages across 8 files to use scoped enum syntax. Change-Id: I27fd7280bccad72a43cda3b669b1f0926c34271c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196207 Tested-by: Jenkins Reviewed-by: Hossein <hossein@libreoffice.org>
This commit is contained in:
@@ -495,42 +495,42 @@ Span XmlReader::handleAttributeValue(
|
|||||||
--end;
|
--end;
|
||||||
}
|
}
|
||||||
char const * p = begin;
|
char const * p = begin;
|
||||||
enum Space { SPACE_NONE, SPACE_SPAN, SPACE_BREAK };
|
enum class Space { None, Span, Break };
|
||||||
// a single true space character can go into the current span,
|
// a single true space character can go into the current span,
|
||||||
// everything else breaks the span
|
// everything else breaks the span
|
||||||
Space space = SPACE_NONE;
|
Space space = Space::None;
|
||||||
while (p != end) {
|
while (p != end) {
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
case '\x09':
|
case '\x09':
|
||||||
case '\x0A':
|
case '\x0A':
|
||||||
case '\x0D':
|
case '\x0D':
|
||||||
switch (space) {
|
switch (space) {
|
||||||
case SPACE_NONE:
|
case Space::None:
|
||||||
pad_.add(begin, p - begin);
|
pad_.add(begin, p - begin);
|
||||||
pad_.add(" ");
|
pad_.add(" ");
|
||||||
space = SPACE_BREAK;
|
space = Space::Break;
|
||||||
break;
|
break;
|
||||||
case SPACE_SPAN:
|
case Space::Span:
|
||||||
pad_.add(begin, p - begin);
|
pad_.add(begin, p - begin);
|
||||||
space = SPACE_BREAK;
|
space = Space::Break;
|
||||||
break;
|
break;
|
||||||
case SPACE_BREAK:
|
case Space::Break:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
begin = ++p;
|
begin = ++p;
|
||||||
break;
|
break;
|
||||||
case ' ':
|
case ' ':
|
||||||
switch (space) {
|
switch (space) {
|
||||||
case SPACE_NONE:
|
case Space::None:
|
||||||
++p;
|
++p;
|
||||||
space = SPACE_SPAN;
|
space = Space::Span;
|
||||||
break;
|
break;
|
||||||
case SPACE_SPAN:
|
case Space::Span:
|
||||||
pad_.add(begin, p - begin);
|
pad_.add(begin, p - begin);
|
||||||
begin = ++p;
|
begin = ++p;
|
||||||
space = SPACE_BREAK;
|
space = Space::Break;
|
||||||
break;
|
break;
|
||||||
case SPACE_BREAK:
|
case Space::Break:
|
||||||
begin = ++p;
|
begin = ++p;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -539,11 +539,11 @@ Span XmlReader::handleAttributeValue(
|
|||||||
pad_.add(begin, p - begin);
|
pad_.add(begin, p - begin);
|
||||||
p = handleReference(p, end);
|
p = handleReference(p, end);
|
||||||
begin = p;
|
begin = p;
|
||||||
space = SPACE_NONE;
|
space = Space::None;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
++p;
|
++p;
|
||||||
space = SPACE_NONE;
|
space = Space::None;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -800,10 +800,10 @@ XmlReader::Result XmlReader::handleNormalizedText(Span * text) {
|
|||||||
pad_.clear();
|
pad_.clear();
|
||||||
char const * flowBegin = pos_;
|
char const * flowBegin = pos_;
|
||||||
char const * flowEnd = pos_;
|
char const * flowEnd = pos_;
|
||||||
enum Space { SPACE_START, SPACE_NONE, SPACE_SPAN, SPACE_BREAK };
|
enum class Space { Start, None, Span, Break };
|
||||||
// a single true space character can go into the current flow,
|
// a single true space character can go into the current flow,
|
||||||
// everything else breaks the flow
|
// everything else breaks the flow
|
||||||
Space space = SPACE_START;
|
Space space = Space::Start;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
switch (peek()) {
|
switch (peek()) {
|
||||||
case '\0': // i.e., EOF
|
case '\0': // i.e., EOF
|
||||||
@@ -813,39 +813,39 @@ XmlReader::Result XmlReader::handleNormalizedText(Span * text) {
|
|||||||
case '\x0A':
|
case '\x0A':
|
||||||
case '\x0D':
|
case '\x0D':
|
||||||
switch (space) {
|
switch (space) {
|
||||||
case SPACE_START:
|
case Space::Start:
|
||||||
case SPACE_BREAK:
|
case Space::Break:
|
||||||
break;
|
break;
|
||||||
case SPACE_NONE:
|
case Space::None:
|
||||||
case SPACE_SPAN:
|
case Space::Span:
|
||||||
space = SPACE_BREAK;
|
space = Space::Break;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
++pos_;
|
++pos_;
|
||||||
break;
|
break;
|
||||||
case ' ':
|
case ' ':
|
||||||
switch (space) {
|
switch (space) {
|
||||||
case SPACE_START:
|
case Space::Start:
|
||||||
case SPACE_BREAK:
|
case Space::Break:
|
||||||
break;
|
break;
|
||||||
case SPACE_NONE:
|
case Space::None:
|
||||||
space = SPACE_SPAN;
|
space = Space::Span;
|
||||||
break;
|
break;
|
||||||
case SPACE_SPAN:
|
case Space::Span:
|
||||||
space = SPACE_BREAK;
|
space = Space::Break;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
++pos_;
|
++pos_;
|
||||||
break;
|
break;
|
||||||
case '&':
|
case '&':
|
||||||
switch (space) {
|
switch (space) {
|
||||||
case SPACE_START:
|
case Space::Start:
|
||||||
break;
|
break;
|
||||||
case SPACE_NONE:
|
case Space::None:
|
||||||
case SPACE_SPAN:
|
case Space::Span:
|
||||||
pad_.add(flowBegin, pos_ - flowBegin);
|
pad_.add(flowBegin, pos_ - flowBegin);
|
||||||
break;
|
break;
|
||||||
case SPACE_BREAK:
|
case Space::Break:
|
||||||
pad_.add(flowBegin, flowEnd - flowBegin);
|
pad_.add(flowBegin, flowEnd - flowBegin);
|
||||||
pad_.add(" ");
|
pad_.add(" ");
|
||||||
break;
|
break;
|
||||||
@@ -853,7 +853,7 @@ XmlReader::Result XmlReader::handleNormalizedText(Span * text) {
|
|||||||
pos_ = handleReference(pos_, end_);
|
pos_ = handleReference(pos_, end_);
|
||||||
flowBegin = pos_;
|
flowBegin = pos_;
|
||||||
flowEnd = pos_;
|
flowEnd = pos_;
|
||||||
space = SPACE_NONE;
|
space = Space::None;
|
||||||
break;
|
break;
|
||||||
case '<':
|
case '<':
|
||||||
++pos_;
|
++pos_;
|
||||||
@@ -861,7 +861,7 @@ XmlReader::Result XmlReader::handleNormalizedText(Span * text) {
|
|||||||
case '!':
|
case '!':
|
||||||
++pos_;
|
++pos_;
|
||||||
if (skipComment()) {
|
if (skipComment()) {
|
||||||
space = SPACE_BREAK;
|
space = Space::Break;
|
||||||
} else {
|
} else {
|
||||||
Span cdata(scanCdataSection());
|
Span cdata(scanCdataSection());
|
||||||
if (cdata.is()) {
|
if (cdata.is()) {
|
||||||
@@ -869,13 +869,13 @@ XmlReader::Result XmlReader::handleNormalizedText(Span * text) {
|
|||||||
// references; it keeps the code simple), but it might
|
// references; it keeps the code simple), but it might
|
||||||
// arguably be better to normalize it:
|
// arguably be better to normalize it:
|
||||||
switch (space) {
|
switch (space) {
|
||||||
case SPACE_START:
|
case Space::Start:
|
||||||
break;
|
break;
|
||||||
case SPACE_NONE:
|
case Space::None:
|
||||||
case SPACE_SPAN:
|
case Space::Span:
|
||||||
pad_.add(flowBegin, pos_ - flowBegin);
|
pad_.add(flowBegin, pos_ - flowBegin);
|
||||||
break;
|
break;
|
||||||
case SPACE_BREAK:
|
case Space::Break:
|
||||||
pad_.add(flowBegin, flowEnd - flowBegin);
|
pad_.add(flowBegin, flowEnd - flowBegin);
|
||||||
pad_.add(" ");
|
pad_.add(" ");
|
||||||
break;
|
break;
|
||||||
@@ -883,7 +883,7 @@ XmlReader::Result XmlReader::handleNormalizedText(Span * text) {
|
|||||||
normalizeLineEnds(cdata);
|
normalizeLineEnds(cdata);
|
||||||
flowBegin = pos_;
|
flowBegin = pos_;
|
||||||
flowEnd = pos_;
|
flowEnd = pos_;
|
||||||
space = SPACE_NONE;
|
space = Space::None;
|
||||||
} else {
|
} else {
|
||||||
skipDocumentTypeDeclaration();
|
skipDocumentTypeDeclaration();
|
||||||
}
|
}
|
||||||
@@ -898,7 +898,7 @@ XmlReader::Result XmlReader::handleNormalizedText(Span * text) {
|
|||||||
case '?':
|
case '?':
|
||||||
++pos_;
|
++pos_;
|
||||||
skipProcessingInstruction();
|
skipProcessingInstruction();
|
||||||
space = SPACE_BREAK;
|
space = Space::Break;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pad_.add(flowBegin, flowEnd - flowBegin);
|
pad_.add(flowBegin, flowEnd - flowBegin);
|
||||||
@@ -909,20 +909,20 @@ XmlReader::Result XmlReader::handleNormalizedText(Span * text) {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
switch (space) {
|
switch (space) {
|
||||||
case SPACE_START:
|
case Space::Start:
|
||||||
flowBegin = pos_;
|
flowBegin = pos_;
|
||||||
break;
|
break;
|
||||||
case SPACE_NONE:
|
case Space::None:
|
||||||
case SPACE_SPAN:
|
case Space::Span:
|
||||||
break;
|
break;
|
||||||
case SPACE_BREAK:
|
case Space::Break:
|
||||||
pad_.add(flowBegin, flowEnd - flowBegin);
|
pad_.add(flowBegin, flowEnd - flowBegin);
|
||||||
pad_.add(" ");
|
pad_.add(" ");
|
||||||
flowBegin = pos_;
|
flowBegin = pos_;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
flowEnd = ++pos_;
|
flowEnd = ++pos_;
|
||||||
space = SPACE_NONE;
|
space = Space::None;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ numericStringToBigInteger(std::u16string_view serialNumber);
|
|||||||
// DNs read as strings from XML files may need to be mangled for compatibility
|
// DNs read as strings from XML files may need to be mangled for compatibility
|
||||||
// as NSS and MS CryptoAPI have different string serialisations; if the DN is
|
// as NSS and MS CryptoAPI have different string serialisations; if the DN is
|
||||||
// from an XCertificate it's "native" already and doesn't need to be mangled.
|
// from an XCertificate it's "native" already and doesn't need to be mangled.
|
||||||
enum EqualMode
|
enum class EqualMode
|
||||||
{
|
{
|
||||||
NOCOMPAT,
|
NoCompat,
|
||||||
COMPAT_2ND,
|
Compat2nd,
|
||||||
COMPAT_BOTH
|
CompatBoth
|
||||||
};
|
};
|
||||||
XSECXMLSEC_DLLPUBLIC bool EqualDistinguishedNames(std::u16string_view rName1,
|
XSECXMLSEC_DLLPUBLIC bool EqualDistinguishedNames(std::u16string_view rName1,
|
||||||
std::u16string_view rName2, EqualMode eMode);
|
std::u16string_view rName2, EqualMode eMode);
|
||||||
|
|||||||
@@ -612,13 +612,17 @@ CPPUNIT_TEST_FIXTURE(SigningTest, testDNCompatibility)
|
|||||||
static constexpr OUString msDN(u"CN=\"\"\"ABC\"\".\", O=\"Enterprise \"\"ABC\"\"\""_ustr);
|
static constexpr OUString msDN(u"CN=\"\"\"ABC\"\".\", O=\"Enterprise \"\"ABC\"\"\""_ustr);
|
||||||
static constexpr OUString nssDN(u"CN=\\\"ABC\\\".,O=Enterprise \\\"ABC\\\""_ustr);
|
static constexpr OUString nssDN(u"CN=\\\"ABC\\\".,O=Enterprise \\\"ABC\\\""_ustr);
|
||||||
// this is just the status quo, possibly either NSS or CryptoAPI might change
|
// this is just the status quo, possibly either NSS or CryptoAPI might change
|
||||||
CPPUNIT_ASSERT(!xmlsecurity::EqualDistinguishedNames(msDN, nssDN, xmlsecurity::NOCOMPAT));
|
CPPUNIT_ASSERT(
|
||||||
CPPUNIT_ASSERT(!xmlsecurity::EqualDistinguishedNames(nssDN, msDN, xmlsecurity::NOCOMPAT));
|
!xmlsecurity::EqualDistinguishedNames(msDN, nssDN, xmlsecurity::EqualMode::NoCompat));
|
||||||
|
CPPUNIT_ASSERT(
|
||||||
|
!xmlsecurity::EqualDistinguishedNames(nssDN, msDN, xmlsecurity::EqualMode::NoCompat));
|
||||||
// with compat flag it should work, with the string one 2nd and the native one 1st
|
// with compat flag it should work, with the string one 2nd and the native one 1st
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
CPPUNIT_ASSERT(xmlsecurity::EqualDistinguishedNames(msDN, nssDN, xmlsecurity::COMPAT_2ND));
|
CPPUNIT_ASSERT(
|
||||||
|
xmlsecurity::EqualDistinguishedNames(msDN, nssDN, xmlsecurity::EqualMode::Compat2nd));
|
||||||
#else
|
#else
|
||||||
CPPUNIT_ASSERT(xmlsecurity::EqualDistinguishedNames(nssDN, msDN, xmlsecurity::COMPAT_2ND));
|
CPPUNIT_ASSERT(
|
||||||
|
xmlsecurity::EqualDistinguishedNames(nssDN, msDN, xmlsecurity::EqualMode::Compat2nd));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -625,7 +625,7 @@ sal_Bool DocumentDigitalSignatures::isAuthorTrusted(
|
|||||||
|
|
||||||
return std::any_of(aTrustedAuthors.begin(), aTrustedAuthors.end(),
|
return std::any_of(aTrustedAuthors.begin(), aTrustedAuthors.end(),
|
||||||
[this, &xAuthor, &sSerialNum](const SvtSecurityOptions::Certificate& rAuthor) {
|
[this, &xAuthor, &sSerialNum](const SvtSecurityOptions::Certificate& rAuthor) {
|
||||||
if (!xmlsecurity::EqualDistinguishedNames(rAuthor.SubjectName, xAuthor->getIssuerName(), xmlsecurity::NOCOMPAT))
|
if (!xmlsecurity::EqualDistinguishedNames(rAuthor.SubjectName, xAuthor->getIssuerName(), xmlsecurity::EqualMode::NoCompat))
|
||||||
return false;
|
return false;
|
||||||
if (rAuthor.SerialNumber != sSerialNum)
|
if (rAuthor.SerialNumber != sSerialNum)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -608,7 +608,7 @@ static auto CheckX509Data(
|
|||||||
start = i; // issuer isn't in the list
|
start = i; // issuer isn't in the list
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (xmlsecurity::EqualDistinguishedNames(certs[i]->getIssuerName(), certs[j]->getSubjectName(), xmlsecurity::NOCOMPAT))
|
if (xmlsecurity::EqualDistinguishedNames(certs[i]->getIssuerName(), certs[j]->getSubjectName(), xmlsecurity::EqualMode::NoCompat))
|
||||||
{
|
{
|
||||||
if (i == j) // self signed
|
if (i == j) // self signed
|
||||||
{
|
{
|
||||||
@@ -641,7 +641,7 @@ static auto CheckX509Data(
|
|||||||
if (chain[i] != j)
|
if (chain[i] != j)
|
||||||
{
|
{
|
||||||
if (xmlsecurity::EqualDistinguishedNames(
|
if (xmlsecurity::EqualDistinguishedNames(
|
||||||
certs[chain[i]]->getSubjectName(), certs[j]->getIssuerName(), xmlsecurity::NOCOMPAT))
|
certs[chain[i]]->getSubjectName(), certs[j]->getIssuerName(), xmlsecurity::EqualMode::NoCompat))
|
||||||
{
|
{
|
||||||
if (chain.size() != i + 1) // already found issue?
|
if (chain.size() != i + 1) // already found issue?
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ void XSecController::setX509Data(
|
|||||||
OUString const serialNumber(xmlsecurity::bigIntegerToNumericString(xCert->getSerialNumber()));
|
OUString const serialNumber(xmlsecurity::bigIntegerToNumericString(xCert->getSerialNumber()));
|
||||||
auto const iter = std::find_if(rX509IssuerSerials.begin(), rX509IssuerSerials.end(),
|
auto const iter = std::find_if(rX509IssuerSerials.begin(), rX509IssuerSerials.end(),
|
||||||
[&](auto const& rX509IssuerSerial) {
|
[&](auto const& rX509IssuerSerial) {
|
||||||
return xmlsecurity::EqualDistinguishedNames(issuerName, rX509IssuerSerial.first, xmlsecurity::COMPAT_2ND)
|
return xmlsecurity::EqualDistinguishedNames(issuerName, rX509IssuerSerial.first, xmlsecurity::EqualMode::Compat2nd)
|
||||||
&& serialNumber == rX509IssuerSerial.second;
|
&& serialNumber == rX509IssuerSerial.second;
|
||||||
});
|
});
|
||||||
if (iter != rX509IssuerSerials.end())
|
if (iter != rX509IssuerSerials.end())
|
||||||
@@ -412,7 +412,7 @@ void XSecController::setX509CertDigest(
|
|||||||
{
|
{
|
||||||
for (auto & it : rData)
|
for (auto & it : rData)
|
||||||
{
|
{
|
||||||
if (xmlsecurity::EqualDistinguishedNames(it.X509IssuerName, rX509IssuerName, xmlsecurity::COMPAT_BOTH)
|
if (xmlsecurity::EqualDistinguishedNames(it.X509IssuerName, rX509IssuerName, xmlsecurity::EqualMode::CompatBoth)
|
||||||
&& it.X509SerialNumber == rX509SerialNumber)
|
&& it.X509SerialNumber == rX509SerialNumber)
|
||||||
{
|
{
|
||||||
it.CertDigest = rCertDigest;
|
it.CertDigest = rCertDigest;
|
||||||
@@ -435,7 +435,7 @@ void XSecController::setX509CertDigest(
|
|||||||
{
|
{
|
||||||
SAL_INFO("xmlsecurity.helper", "cannot parse X509Certificate");
|
SAL_INFO("xmlsecurity.helper", "cannot parse X509Certificate");
|
||||||
}
|
}
|
||||||
else if (xmlsecurity::EqualDistinguishedNames(xCert->getIssuerName(), rX509IssuerName, xmlsecurity::COMPAT_2ND)
|
else if (xmlsecurity::EqualDistinguishedNames(xCert->getIssuerName(), rX509IssuerName, xmlsecurity::EqualMode::Compat2nd)
|
||||||
&& xmlsecurity::bigIntegerToNumericString(xCert->getSerialNumber()) == rX509SerialNumber)
|
&& xmlsecurity::bigIntegerToNumericString(xCert->getSerialNumber()) == rX509SerialNumber)
|
||||||
{
|
{
|
||||||
it.CertDigest = rCertDigest;
|
it.CertDigest = rCertDigest;
|
||||||
|
|||||||
@@ -859,7 +859,7 @@ bool EqualDistinguishedNames(
|
|||||||
std::u16string_view const rName1, std::u16string_view const rName2,
|
std::u16string_view const rName1, std::u16string_view const rName2,
|
||||||
EqualMode const eMode)
|
EqualMode const eMode)
|
||||||
{
|
{
|
||||||
if (eMode == COMPAT_BOTH && !rName1.empty() && rName1 == rName2)
|
if (eMode == EqualMode::CompatBoth && !rName1.empty() && rName1 == rName2)
|
||||||
{ // handle case where both need to be converted
|
{ // handle case where both need to be converted
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -876,7 +876,7 @@ bool EqualDistinguishedNames(
|
|||||||
&blob1, &blob2) == TRUE;
|
&blob1, &blob2) == TRUE;
|
||||||
delete[] blob2.pbData;
|
delete[] blob2.pbData;
|
||||||
}
|
}
|
||||||
if (!ret && eMode == COMPAT_2ND)
|
if (!ret && eMode == EqualMode::Compat2nd)
|
||||||
{
|
{
|
||||||
CERT_NAME_BLOB blob2compat;
|
CERT_NAME_BLOB blob2compat;
|
||||||
if (!EncodeDistinguishedName(CompatDNNSS(OUString(rName2)), blob2compat))
|
if (!EncodeDistinguishedName(CompatDNNSS(OUString(rName2)), blob2compat))
|
||||||
|
|||||||
@@ -502,10 +502,11 @@ namespace xmlsecurity {
|
|||||||
static OUString CompatDNCryptoAPI(std::u16string_view rDN)
|
static OUString CompatDNCryptoAPI(std::u16string_view rDN)
|
||||||
{
|
{
|
||||||
OUStringBuffer buf(rDN.size());
|
OUStringBuffer buf(rDN.size());
|
||||||
enum { DEFAULT, INVALUE, INQUOTE } state(DEFAULT);
|
enum class State { Default, InValue, InQuote };
|
||||||
|
State state(State::Default);
|
||||||
for (size_t i = 0; i < rDN.size(); ++i)
|
for (size_t i = 0; i < rDN.size(); ++i)
|
||||||
{
|
{
|
||||||
if (state == DEFAULT)
|
if (state == State::Default)
|
||||||
{
|
{
|
||||||
buf.append(rDN[i]);
|
buf.append(rDN[i]);
|
||||||
if (rDN[i] == '=')
|
if (rDN[i] == '=')
|
||||||
@@ -518,25 +519,25 @@ static OUString CompatDNCryptoAPI(std::u16string_view rDN)
|
|||||||
{
|
{
|
||||||
buf.append(rDN[i+1]);
|
buf.append(rDN[i+1]);
|
||||||
++i;
|
++i;
|
||||||
state = INQUOTE;
|
state = State::InQuote;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
state = INVALUE;
|
state = State::InValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (state == INVALUE)
|
else if (state == State::InValue)
|
||||||
{
|
{
|
||||||
if (rDN[i] == '+' || rDN[i] == ',' || rDN[i] == ';')
|
if (rDN[i] == '+' || rDN[i] == ',' || rDN[i] == ';')
|
||||||
{
|
{
|
||||||
state = DEFAULT;
|
state = State::Default;
|
||||||
}
|
}
|
||||||
buf.append(rDN[i]);
|
buf.append(rDN[i]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
assert(state == INQUOTE);
|
assert(state == State::InQuote);
|
||||||
if (rDN[i] == '"')
|
if (rDN[i] == '"')
|
||||||
{
|
{
|
||||||
if (rDN.size() != i+1 && rDN[i+1] == '"')
|
if (rDN.size() != i+1 && rDN[i+1] == '"')
|
||||||
@@ -547,7 +548,7 @@ static OUString CompatDNCryptoAPI(std::u16string_view rDN)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
buf.append(rDN[i]);
|
buf.append(rDN[i]);
|
||||||
state = DEFAULT;
|
state = State::Default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -563,7 +564,7 @@ bool EqualDistinguishedNames(
|
|||||||
std::u16string_view const rName1, std::u16string_view const rName2,
|
std::u16string_view const rName1, std::u16string_view const rName2,
|
||||||
EqualMode const eMode)
|
EqualMode const eMode)
|
||||||
{
|
{
|
||||||
if (eMode == COMPAT_BOTH && !rName1.empty() && rName1 == rName2)
|
if (eMode == EqualMode::CompatBoth && !rName1.empty() && rName1 == rName2)
|
||||||
{ // handle case where both need to be converted
|
{ // handle case where both need to be converted
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -579,7 +580,7 @@ bool EqualDistinguishedNames(
|
|||||||
ret = (CERT_CompareName(pName1, pName2) == SECEqual);
|
ret = (CERT_CompareName(pName1, pName2) == SECEqual);
|
||||||
CERT_DestroyName(pName2);
|
CERT_DestroyName(pName2);
|
||||||
}
|
}
|
||||||
if (!ret && eMode == COMPAT_2ND)
|
if (!ret && eMode == EqualMode::Compat2nd)
|
||||||
{
|
{
|
||||||
CERTName *const pName2Compat(CERT_AsciiToName(OUStringToOString(
|
CERTName *const pName2Compat(CERT_AsciiToName(OUStringToOString(
|
||||||
CompatDNCryptoAPI(rName2), RTL_TEXTENCODING_UTF8).getStr()));
|
CompatDNCryptoAPI(rName2), RTL_TEXTENCODING_UTF8).getStr()));
|
||||||
|
|||||||
Reference in New Issue
Block a user