Improve patches to sun.security.util on top of upstream OpenJDK8u121-b13.
adding missing Android change documentation.
Test: make
Bug: 36461944
Change-Id: I0f29abb3063ce42b998bf92ebb1cc021db8f2dad
diff --git a/ojluni/src/main/java/sun/security/util/DerInputStream.java b/ojluni/src/main/java/sun/security/util/DerInputStream.java
index b182d4e..6608676 100644
--- a/ojluni/src/main/java/sun/security/util/DerInputStream.java
+++ b/ojluni/src/main/java/sun/security/util/DerInputStream.java
@@ -325,6 +325,7 @@
* (used to initialize an auto-growing data structure)
* @return array of the values in the sequence
*/
+ // BEGIN Android-changed: Original encoded form needed for APKs parsing/validation
public DerValue[] getSequence(int startLen,
boolean originalEncodedFormRetained) throws IOException {
tag = (byte)buffer.read();
@@ -347,6 +348,7 @@
return getSequence(
startLen,
false); // no need to retain original encoded form
+ // END Android-changed: Original encoded form needed for APKs parsing/validation
}
/**
@@ -379,6 +381,7 @@
*/
public DerValue[] getSet(int startLen, boolean implicit)
throws IOException {
+ // BEGIN Android-changed: Original encoded form needed for APKs parsing/validation
return getSet(
startLen,
implicit,
@@ -395,6 +398,7 @@
}
}
return (readVector(startLen, originalEncodedFormRetained));
+ // END Android-changed: Original encoded form needed for APKs parsing/validation
}
/*
@@ -403,6 +407,7 @@
* this same helper routine.
*/
protected DerValue[] readVector(int startLen) throws IOException {
+ // BEGIN Android-changed: Original encoded form needed for APKs parsing/validation
return readVector(
startLen,
false); // no need to retain original encoded form
@@ -415,6 +420,7 @@
*/
protected DerValue[] readVector(int startLen,
boolean originalEncodedFormRetained) throws IOException {
+ // END Android-changed: Original encoded form needed for APKs parsing/validation
DerInputStream newstr;
byte lenByte = (byte)buffer.read();
@@ -459,6 +465,7 @@
DerValue value;
do {
+ // Android-changed: Original encoded form needed for APKs parsing/validation
value = new DerValue(newstr.buffer, originalEncodedFormRetained);
vec.addElement(value);
} while (newstr.available() > 0);
diff --git a/ojluni/src/main/java/sun/security/util/DerValue.java b/ojluni/src/main/java/sun/security/util/DerValue.java
index 21116dc..3045995 100644
--- a/ojluni/src/main/java/sun/security/util/DerValue.java
+++ b/ojluni/src/main/java/sun/security/util/DerValue.java
@@ -72,11 +72,13 @@
private int length;
+ // BEGIN Android-added: Original encoded form needed for APKs parsing/validation
/**
* The original encoded form of the whole value (tag, length, and value)
* or null if the form was not provided or was not retained during parsing.
*/
private byte[] originalEncodedForm;
+ // END Android-added: Original encoded form needed for APKs parsing/validation
/*
* The type starts at the first byte of the encoding, and
@@ -249,6 +251,7 @@
/*
* package private
*/
+ // BEGIN Android-changed: Original encoded form needed for APKs parsing/validation
DerValue(DerInputBuffer in, boolean originalEncodedFormRetained)
throws IOException {
// XXX must also parse BER-encoded constructed
@@ -294,6 +297,7 @@
int consumed = in.getPos() - startPosInInput;
originalEncodedForm = in.getSlice(startPosInInput, consumed);
}
+ // END Android-changed: Original encoded form needed for APKs parsing/validation
}
/**
@@ -834,6 +838,7 @@
}
}
+ // BEGIN Android-added: Original encoded form needed for APKs parsing/validation
/**
* Returns the original encoded form or {@code null} if the form was not
* retained or is not available.
@@ -842,6 +847,7 @@
return (originalEncodedForm != null)
? originalEncodedForm.clone() : null;
}
+ // END Android-added: Original encoded form needed for APKs parsing/validation
/**
* Returns a DER-encoded value, such that if it's passed to the