Index: net/cert/x509_certificate_unittest.cc |
diff --git a/net/cert/x509_certificate_unittest.cc b/net/cert/x509_certificate_unittest.cc |
index a5806a5ae2b6878562b5d8e4ddf987229dd25e34..597513d71de2beaa5825e78693d8aeea4fb8ad47 100644 |
--- a/net/cert/x509_certificate_unittest.cc |
+++ b/net/cert/x509_certificate_unittest.cc |
@@ -22,6 +22,7 @@ |
#include "net/test/test_certificate_data.h" |
#include "net/test/test_data_directory.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "url/url_features.h" |
#if defined(USE_NSS_CERTS) |
#include <cert.h> |
@@ -267,6 +268,86 @@ TEST(X509CertificateTest, UnescapedSpecialCharacters) { |
EXPECT_EQ(0U, subject.domain_components.size()); |
} |
+TEST(X509CertificateTest, TeletexStringIsLatin1) { |
+ base::FilePath certs_dir = |
+ GetTestNetDataDirectory().AppendASCII("parse_certificate_unittest"); |
+ |
+ scoped_refptr<X509Certificate> cert = |
+ ImportCertFromFile(certs_dir, "subject_t61string.pem"); |
+ ASSERT_TRUE(cert); |
+ |
+ const CertPrincipal& subject = cert->subject(); |
+ EXPECT_EQ( |
+ " !\"#$%&'()*+,-./" |
+ "0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`" |
+ "abcdefghijklmnopqrstuvwxyz{|}~" |
+ " ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæç" |
+ "èéêëìíîïðñòóôõö÷øùúûüýþÿ", |
+ subject.organization_names[0]); |
+} |
+ |
+TEST(X509CertificateTest, TeletexStringControlChars) { |
+ base::FilePath certs_dir = |
+ GetTestNetDataDirectory().AppendASCII("parse_certificate_unittest"); |
+ |
+ scoped_refptr<X509Certificate> cert = |
+ ImportCertFromFile(certs_dir, "subject_t61string_1-32.pem"); |
+ ASSERT_TRUE(cert); |
+ |
+ const CertPrincipal& subject = cert->subject(); |
+ EXPECT_EQ( |
+ "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12" |
+ "\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20", |
+ subject.organization_names[0]); |
+} |
+ |
+TEST(X509CertificateTest, TeletexStringIsLatin1OrCp1252) { |
+ base::FilePath certs_dir = |
+ GetTestNetDataDirectory().AppendASCII("parse_certificate_unittest"); |
+ |
+ scoped_refptr<X509Certificate> cert = |
+ ImportCertFromFile(certs_dir, "subject_t61string_126-160.pem"); |
+ ASSERT_TRUE(cert); |
+ |
+ const CertPrincipal& subject = cert->subject(); |
+#if (defined(OS_MACOSX) && !defined(OS_IOS)) || \ |
+ (BUILDFLAG(USE_BYTE_CERTS) && !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES)) |
+ // Mac: TeletexString is decoded as CP1252. |
+ // use_byte_certs: ICU ISO-8859-1 seems to be CP1252 actually. |
+ // (but with use_platform_icu_alternatives it's not.) |
+ EXPECT_EQ( |
+ "~\x7F\xE2\x82\xAC\xC2\x81\xE2\x80\x9A\xC6\x92\xE2\x80\x9E\xE2\x80\xA6" |
+ "\xE2\x80\xA0\xE2\x80\xA1\xCB\x86\xE2\x80\xB0\xC5\xA0\xE2\x80\xB9\xC5\x92" |
+ "\xC2\x8D\xC5\xBD\xC2\x8F\xC2\x90\xE2\x80\x98\xE2\x80\x99\xE2\x80\x9C\xE2" |
+ "\x80\x9D\xE2\x80\xA2\xE2\x80\x93\xE2\x80\x94\xCB\x9C\xE2\x84\xA2\xC5\xA1" |
+ "\xE2\x80\xBA\xC5\x93\xC2\x9D\xC5\xBE\xC5\xB8\xC2\xA0", |
+ subject.organization_names[0]); |
+#else |
+ // NSS, Win, Android, iOS: TeletexString is decoded as latin1, so 127-160 get |
+ // decoded to equivalent unicode control chars. |
+ EXPECT_EQ( |
+ "~\x7F\xC2\x80\xC2\x81\xC2\x82\xC2\x83\xC2\x84\xC2\x85\xC2\x86\xC2\x87" |
+ "\xC2\x88\xC2\x89\xC2\x8A\xC2\x8B\xC2\x8C\xC2\x8D\xC2\x8E\xC2\x8F\xC2\x90" |
+ "\xC2\x91\xC2\x92\xC2\x93\xC2\x94\xC2\x95\xC2\x96\xC2\x97\xC2\x98\xC2\x99" |
+ "\xC2\x9A\xC2\x9B\xC2\x9C\xC2\x9D\xC2\x9E\xC2\x9F\xC2\xA0", |
+ subject.organization_names[0]); |
+#endif |
+} |
+ |
+TEST(X509CertificateTest, TeletexStringIsNotARealT61String) { |
+ base::FilePath certs_dir = |
+ GetTestNetDataDirectory().AppendASCII("parse_certificate_unittest"); |
+ |
+ scoped_refptr<X509Certificate> cert = |
+ ImportCertFromFile(certs_dir, "subject_t61string_actual.pem"); |
+ ASSERT_TRUE(cert); |
+ |
+ const CertPrincipal& subject = cert->subject(); |
+ // If TeletexStrings were actually parsed according to T.61, this would be |
+ // "あ". (Probably. Not verified against a real implementation.) |
+ EXPECT_EQ("\x1B$@$\"", subject.organization_names[0]); |
+} |
+ |
TEST(X509CertificateTest, SerialNumbers) { |
scoped_refptr<X509Certificate> google_cert( |
X509Certificate::CreateFromBytes( |