Merge "Small updates to Android-changed code in javax.net.ssl"
diff --git a/ojluni/src/main/java/sun/security/x509/AVA.java b/ojluni/src/main/java/sun/security/x509/AVA.java
index ff9c62a..a047500 100644
--- a/ojluni/src/main/java/sun/security/x509/AVA.java
+++ b/ojluni/src/main/java/sun/security/x509/AVA.java
@@ -150,9 +150,6 @@
/**
* Parse an AVA string formatted according to format.
- *
- * XXX format RFC1779 should only allow RFC1779 syntax but is
- * actually DEFAULT with RFC1779 keywords.
*/
AVA(Reader in, int format) throws IOException {
this(in, format, Collections.<String, String>emptyMap());
@@ -272,7 +269,7 @@
break;
}
- // Android-changed: Skip trailing whitespace.
+ // BEGIN Android-added: AVA: Support DerValue hex strings that contain ' ' or '\n'
if (c == ' ' || c == '\n') {
do {
if (c != ' ' && c != '\n') {
@@ -282,7 +279,7 @@
} while (!isTerminator(c, format));
break;
}
-
+ // END Android-added: AVA: Support DerValue hex strings that contain ' ' or '\n'
int cVal = hexDigits.indexOf(Character.toUpperCase((char)c));
if (cVal == -1) {
@@ -384,11 +381,17 @@
PRESERVE_OLD_DC_ENCODING == false)) {
// EmailAddress and DomainComponent must be IA5String
return new DerValue(DerValue.tag_IA5String,
+ // Android-changed: Do not trim() DerValue strings.
+ // temp.toString().trim());
temp.toString());
} else if (isPrintableString) {
+ // Android-changed: Do not trim() DerValue strings.
+ //return new DerValue(temp.toString().trim());
return new DerValue(temp.toString());
} else {
return new DerValue(DerValue.tag_UTF8String,
+ // Android-changed: Do not trim() DerValue strings.
+ // temp.toString().trim());
temp.toString());
}
}
@@ -900,6 +903,8 @@
* the dotted-decimal form.
*/
if ((typeAndValue.charAt(0) >= '0' && typeAndValue.charAt(0) <= '9') ||
+ // Android-changed: AVA: Support DerValue hex strings that contain ' ' or '\n'
+ //!isDerString(value, true))
(!isDerString(value, true) && value.tag != DerValue.tag_T61String))
{
byte[] data = null;
diff --git a/ojluni/src/main/java/sun/security/x509/AlgorithmId.java b/ojluni/src/main/java/sun/security/x509/AlgorithmId.java
index 378ca2f..260d4aa 100644
--- a/ojluni/src/main/java/sun/security/x509/AlgorithmId.java
+++ b/ojluni/src/main/java/sun/security/x509/AlgorithmId.java
@@ -121,18 +121,14 @@
try {
algParams = AlgorithmParameters.getInstance(algidString);
} catch (NoSuchAlgorithmException e) {
- // BEGIN Android-changed
- // It was searching for the EC parameters in an internal provider in the deleted package
- // sun.security.ec before setting them to null. Since EC is in the OpenSSL provider,
- // there's no need for such fallback. Setting it to null directly.
/*
* This algorithm parameter type is not supported, so we cannot
* parse the parameters.
*/
algParams = null;
return;
- // END Android-changed
}
+
// Decode (parse) the parameters
algParams.init(params.toByteArray());
}
@@ -246,11 +242,13 @@
}
}
+ // BEGIN Android-added: Update algorithm mapping tables for names when OID is used
// Try to update the name <-> OID mapping table.
synchronized (oidTable) {
reinitializeMappingTableLocked();
algName = nameTable.get(algid);
}
+ // END Android-added: Update algorithm mapping tables for names when OID is used
return (algName == null) ? algid.toString() : algName;
}
@@ -566,6 +564,7 @@
// See if any of the installed providers supply a mapping from
// the given algorithm name to an OID string
+ // BEGIN Android-changed: Update algorithm mapping tables for names when OID is used
synchronized (oidTable) {
reinitializeMappingTableLocked();
return oidTable.get(name.toUpperCase(Locale.ENGLISH));
@@ -644,17 +643,20 @@
initOidTableVersion = currentVersion;
}
+ // END Android-changed: Update algorithm mapping tables for names when OID is used
}
private static ObjectIdentifier oid(int ... values) {
return ObjectIdentifier.newInternal(values);
}
+ // BEGIN Android-changed: Parsing mapping as OID even if "OID." prefix isn't specified
private static int initOidTableVersion = -1;
private static final Map<String,ObjectIdentifier> oidTable =
new HashMap<String,ObjectIdentifier>(1);
private static final Map<ObjectIdentifier,String> nameTable =
new HashMap<ObjectIdentifier,String>();
+ // END Android-changed: Parsing mapping as OID even if "OID." prefix isn't specified
/*****************************************************************/
@@ -939,6 +941,8 @@
*/
sha1WithDSA_oid = ObjectIdentifier.newInternal(dsaWithSHA1_PKIX_data);
+ // Android-removed: Parsing mapping as OID even if "OID." prefix isn't specified
+ //nameTable = new HashMap<ObjectIdentifier,String>();
nameTable.put(MD5_oid, "MD5");
nameTable.put(MD2_oid, "MD2");
nameTable.put(SHA_oid, "SHA-1");
diff --git a/ojluni/src/main/java/sun/security/x509/OIDMap.java b/ojluni/src/main/java/sun/security/x509/OIDMap.java
index 9eed0f2..0e3ae16 100644
--- a/ojluni/src/main/java/sun/security/x509/OIDMap.java
+++ b/ojluni/src/main/java/sun/security/x509/OIDMap.java
@@ -112,6 +112,8 @@
/** Map String(friendly name) -> OIDInfo(info) */
private final static Map<String,OIDInfo> nameMap;
+ // BEGIN Android-changed: Specify Class objects rather for oidMap rather than String
+ // literals + reflection.
static {
oidMap = new HashMap<ObjectIdentifier,OIDInfo>();
nameMap = new HashMap<String,OIDInfo>();
@@ -200,6 +202,8 @@
return clazz;
}
}
+ // END Android-changed: Specify Class objects rather for oidMap rather than String
+ // literals + reflection.
/**
* Add a name to lookup table.
diff --git a/ojluni/src/main/java/sun/security/x509/RDN.java b/ojluni/src/main/java/sun/security/x509/RDN.java
index 5a4c243..3bfc524 100644
--- a/ojluni/src/main/java/sun/security/x509/RDN.java
+++ b/ojluni/src/main/java/sun/security/x509/RDN.java
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2014 The Android Open Source Project
- * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -478,11 +478,11 @@
* AVA's containing a standard keyword are ordered alphabetically,
* followed by AVA's containing an OID keyword, ordered numerically
*/
- @Override
public int compare(AVA a1, AVA a2) {
boolean a1Has2253 = a1.hasRFC2253Keyword();
boolean a2Has2253 = a2.hasRFC2253Keyword();
+ // BEGIN Android-changed: Keep sort order of RDN from Android M
if (a1Has2253) {
if (a2Has2253) {
return a1.toRFC2253CanonicalString().compareTo
@@ -506,6 +506,7 @@
a1Oid[pos] - a2Oid[pos];
}
}
+ // BEGIN Android-changed: Keep sort order of RDN from prev impl
}
}
diff --git a/ojluni/src/main/java/sun/security/x509/X500Name.java b/ojluni/src/main/java/sun/security/x509/X500Name.java
index 166ce3c..e708837 100644
--- a/ojluni/src/main/java/sun/security/x509/X500Name.java
+++ b/ojluni/src/main/java/sun/security/x509/X500Name.java
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2014 The Android Open Source Project
- * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -876,6 +876,7 @@
return;
}
+ // Android-added: refuse DN starting with new line or tab
checkNoNewLinesNorTabsAtBeginningOfDN(input);
List<RDN> dnVector = new ArrayList<>();
@@ -944,6 +945,7 @@
names = dnVector.toArray(new RDN[dnVector.size()]);
}
+ // BEGIN Android-added: refuse DN starting with new line or tab
/**
* Disallow new lines and tabs at the beginning of DN.
*
@@ -960,6 +962,7 @@
}
}
}
+ // END Android-added: refuse DN starting with new line or tab
private void parseRFC2253DN(String dnString) throws IOException {
if (dnString.length() == 0) {
@@ -1019,6 +1022,7 @@
static int countQuotes(String string, int from, int to) {
int count = 0;
+ // BEGIN Android-changed: Fix countQuotes in case of escaped backslashes: \\"
int escape = 0;
for (int i = from; i < to; i++) {
if (string.charAt(i) == '"' && escape % 2 == 0) {
@@ -1026,6 +1030,7 @@
}
escape = (string.charAt(i) == '\\') ? escape + 1 : 0;
}
+ // END Android-changed: Fix countQuotes in case of escaped backslashes: \\"
return count;
}