Merge "Implement range-based pin list" am: f90ec83802
am: ea3740650c
Change-Id: Iecce8926bde3610c0339cd8f22185e81c73a3a23
This commit is contained in:
commit
bebef49503
|
@ -381,9 +381,8 @@ class SignApk {
|
||||||
byte[] buffer = new byte[4096];
|
byte[] buffer = new byte[4096];
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
List<Pattern> pinPatterns = extractPinPatterns(in);
|
List<Hints.PatternWithRange> pinPatterns = extractPinPatterns(in);
|
||||||
ArrayList<Hints.ByteRange> pinByteRanges = pinPatterns == null ? null : new ArrayList<>();
|
ArrayList<Hints.ByteRange> pinByteRanges = pinPatterns == null ? null : new ArrayList<>();
|
||||||
HashSet<String> namesToPin = new HashSet<>();
|
|
||||||
|
|
||||||
ArrayList<String> names = new ArrayList<String>();
|
ArrayList<String> names = new ArrayList<String>();
|
||||||
for (Enumeration<JarEntry> e = in.entries(); e.hasMoreElements();) {
|
for (Enumeration<JarEntry> e = in.entries(); e.hasMoreElements();) {
|
||||||
|
@ -399,13 +398,6 @@ class SignApk {
|
||||||
if (Hints.PIN_BYTE_RANGE_ZIP_ENTRY_NAME.equals(entryName)) {
|
if (Hints.PIN_BYTE_RANGE_ZIP_ENTRY_NAME.equals(entryName)) {
|
||||||
continue; // We regenerate it below.
|
continue; // We regenerate it below.
|
||||||
}
|
}
|
||||||
if (pinPatterns != null) {
|
|
||||||
for (Pattern pinPattern : pinPatterns) {
|
|
||||||
if (pinPattern.matcher(entryName).matches()) {
|
|
||||||
namesToPin.add(entryName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
names.add(entryName);
|
names.add(entryName);
|
||||||
}
|
}
|
||||||
Collections.sort(names);
|
Collections.sort(names);
|
||||||
|
@ -485,6 +477,7 @@ class SignApk {
|
||||||
DataSink entryDataSink =
|
DataSink entryDataSink =
|
||||||
(inspectEntryRequest != null) ? inspectEntryRequest.getDataSink() : null;
|
(inspectEntryRequest != null) ? inspectEntryRequest.getDataSink() : null;
|
||||||
|
|
||||||
|
long entryDataStart = outCounter.getWrittenBytes();
|
||||||
try (InputStream data = in.getInputStream(inEntry)) {
|
try (InputStream data = in.getInputStream(inEntry)) {
|
||||||
while ((num = data.read(buffer)) > 0) {
|
while ((num = data.read(buffer)) > 0) {
|
||||||
out.write(buffer, 0, num);
|
out.write(buffer, 0, num);
|
||||||
|
@ -500,11 +493,27 @@ class SignApk {
|
||||||
inspectEntryRequest.done();
|
inspectEntryRequest.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (namesToPin.contains(name)) {
|
if (pinPatterns != null) {
|
||||||
pinByteRanges.add(
|
boolean pinFileHeader = false;
|
||||||
new Hints.ByteRange(
|
for (Hints.PatternWithRange pinPattern : pinPatterns) {
|
||||||
entryHeaderStart,
|
if (!pinPattern.matcher(name).matches()) {
|
||||||
outCounter.getWrittenBytes()));
|
continue;
|
||||||
|
}
|
||||||
|
Hints.ByteRange dataRange =
|
||||||
|
new Hints.ByteRange(
|
||||||
|
entryDataStart,
|
||||||
|
outCounter.getWrittenBytes());
|
||||||
|
Hints.ByteRange pinRange =
|
||||||
|
pinPattern.ClampToAbsoluteByteRange(dataRange);
|
||||||
|
if (pinRange != null) {
|
||||||
|
pinFileHeader = true;
|
||||||
|
pinByteRanges.add(pinRange);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pinFileHeader) {
|
||||||
|
pinByteRanges.add(new Hints.ByteRange(entryHeaderStart,
|
||||||
|
entryDataStart));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -528,6 +537,7 @@ class SignApk {
|
||||||
DataSink entryDataSink =
|
DataSink entryDataSink =
|
||||||
(inspectEntryRequest != null) ? inspectEntryRequest.getDataSink() : null;
|
(inspectEntryRequest != null) ? inspectEntryRequest.getDataSink() : null;
|
||||||
|
|
||||||
|
long entryDataStart = outCounter.getWrittenBytes();
|
||||||
InputStream data = in.getInputStream(inEntry);
|
InputStream data = in.getInputStream(inEntry);
|
||||||
while ((num = data.read(buffer)) > 0) {
|
while ((num = data.read(buffer)) > 0) {
|
||||||
out.write(buffer, 0, num);
|
out.write(buffer, 0, num);
|
||||||
|
@ -541,11 +551,27 @@ class SignApk {
|
||||||
inspectEntryRequest.done();
|
inspectEntryRequest.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (namesToPin.contains(name)) {
|
if (pinPatterns != null) {
|
||||||
pinByteRanges.add(
|
boolean pinFileHeader = false;
|
||||||
new Hints.ByteRange(
|
for (Hints.PatternWithRange pinPattern : pinPatterns) {
|
||||||
entryHeaderStart,
|
if (!pinPattern.matcher(name).matches()) {
|
||||||
outCounter.getWrittenBytes()));
|
continue;
|
||||||
|
}
|
||||||
|
Hints.ByteRange dataRange =
|
||||||
|
new Hints.ByteRange(
|
||||||
|
entryDataStart,
|
||||||
|
outCounter.getWrittenBytes());
|
||||||
|
Hints.ByteRange pinRange =
|
||||||
|
pinPattern.ClampToAbsoluteByteRange(dataRange);
|
||||||
|
if (pinRange != null) {
|
||||||
|
pinFileHeader = true;
|
||||||
|
pinByteRanges.add(pinRange);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pinFileHeader) {
|
||||||
|
pinByteRanges.add(new Hints.ByteRange(entryHeaderStart,
|
||||||
|
entryDataStart));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -558,7 +584,7 @@ class SignApk {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Pattern> extractPinPatterns(JarFile in) throws IOException {
|
private static List<Hints.PatternWithRange> extractPinPatterns(JarFile in) throws IOException {
|
||||||
ZipEntry pinMetaEntry = in.getEntry(Hints.PIN_HINT_ASSET_ZIP_ENTRY_NAME);
|
ZipEntry pinMetaEntry = in.getEntry(Hints.PIN_HINT_ASSET_ZIP_ENTRY_NAME);
|
||||||
if (pinMetaEntry == null) {
|
if (pinMetaEntry == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
Loading…
Reference in New Issue