You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by li...@apache.org on 2022/09/15 05:10:47 UTC
[tomcat-jakartaee-migration] branch main updated: Correct a regression in the previous fix for #29
This is an automated email from the ASF dual-hosted git repository.
lihan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat-jakartaee-migration.git
The following commit(s) were added to refs/heads/main by this push:
new adc4ec5 Correct a regression in the previous fix for #29
adc4ec5 is described below
commit adc4ec5b8f3375bfc98d35f694fd6a0cc75f29f1
Author: lihan <li...@apache.org>
AuthorDate: Thu Sep 15 13:04:43 2022 +0800
Correct a regression in the previous fix for #29
---
.../org/apache/tomcat/jakartaee/Migration.java | 91 ++++++----------------
1 file changed, 23 insertions(+), 68 deletions(-)
diff --git a/src/main/java/org/apache/tomcat/jakartaee/Migration.java b/src/main/java/org/apache/tomcat/jakartaee/Migration.java
index bd18767..d8b899c 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/Migration.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/Migration.java
@@ -36,7 +36,6 @@ import java.util.zip.CRC32;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
-import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
@@ -215,8 +214,9 @@ public class Migration {
private void migrateArchiveStreaming(InputStream src, OutputStream dest) throws IOException {
try (ZipArchiveInputStream srcZipStream = new ZipArchiveInputStream(CloseShieldInputStream.wrap(src));
- CrcZipArchiveOutputStream destZipStream = new CrcZipArchiveOutputStream(CloseShieldOutputStream.wrap(dest))) {
+ ZipArchiveOutputStream destZipStream = new ZipArchiveOutputStream(CloseShieldOutputStream.wrap(dest))) {
ZipArchiveEntry srcZipEntry;
+ CRC32 crc32 = new CRC32();
while ((srcZipEntry = srcZipStream.getNextZipEntry()) != null) {
String srcName = srcZipEntry.getName();
if (isSignatureFile(srcName)) {
@@ -224,11 +224,25 @@ public class Migration {
continue;
}
String destName = profile.convert(srcName);
- MigrationZipArchiveEntry destZipEntry = new MigrationZipArchiveEntry(srcZipEntry, false);
- destZipEntry.setName(destName);
- destZipStream.putArchiveEntry(destZipEntry);
- migrateStream(srcName, srcZipStream, destZipStream);
- destZipStream.closeArchiveEntry();
+ if (srcZipEntry.getMethod() == ZipEntry.STORED) {
+ ByteArrayOutputStream tempBuffer = new ByteArrayOutputStream((int) (srcZipEntry.getSize() * 1.05));
+ migrateStream(srcName, srcZipStream, tempBuffer);
+ crc32.update(tempBuffer.toByteArray(), 0, tempBuffer.size());
+ MigrationZipArchiveEntry destZipEntry = new MigrationZipArchiveEntry(srcZipEntry);
+ destZipEntry.setName(destName);
+ destZipEntry.setSize(tempBuffer.size());
+ destZipEntry.setCrc(crc32.getValue());
+ destZipStream.putArchiveEntry(destZipEntry);
+ tempBuffer.writeTo(destZipStream);
+ destZipStream.closeArchiveEntry();
+ crc32.reset();
+ } else {
+ MigrationZipArchiveEntry destZipEntry = new MigrationZipArchiveEntry(srcZipEntry);
+ destZipEntry.setName(destName);
+ destZipStream.putArchiveEntry(destZipEntry);
+ migrateStream(srcName, srcZipStream, destZipStream);
+ destZipStream.closeArchiveEntry();
+ }
}
}
}
@@ -254,7 +268,7 @@ public class Migration {
continue;
}
String destName = profile.convert(srcName);
- MigrationZipArchiveEntry destZipEntry = new MigrationZipArchiveEntry(srcZipEntry, true);
+ MigrationZipArchiveEntry destZipEntry = new MigrationZipArchiveEntry(srcZipEntry);
destZipEntry.setName(destName);
destZipStream.putArchiveEntry(destZipEntry);
migrateStream(srcName, srcZipFile.getInputStream(srcZipEntry), destZipStream);
@@ -320,30 +334,8 @@ public class Migration {
}
private static class MigrationZipArchiveEntry extends ZipArchiveEntry {
- protected final CRC32 crc = new CRC32();
- protected long size = 0;
- protected boolean needResetCrc;
- public MigrationZipArchiveEntry(ZipArchiveEntry entry, boolean inMemory) throws ZipException {
+ public MigrationZipArchiveEntry(ZipArchiveEntry entry) throws ZipException {
super(entry);
- // No recalculation required, when in memory mode and not of type SORTED
- needResetCrc = !inMemory && entry.getMethod() == ZipEntry.STORED;
- }
-
- @Override
- public long getSize() {
- return needResetCrc ? size : super.getSize();
- }
-
- @Override
- public long getCrc() {
- return needResetCrc ? crc.getValue() : super.getCrc();
- }
-
- public void update(byte[] b, int offset, int length) {
- if (needResetCrc) {
- crc.update(b, offset, length);
- size += length;
- }
}
@Override
@@ -351,41 +343,4 @@ public class Migration {
super.setName(name);
}
}
-
- private static class CrcZipArchiveOutputStream extends ZipArchiveOutputStream {
- private MigrationZipArchiveEntry current;
- private CrcZipArchiveOutputStream(OutputStream out) {
- super(out);
- }
-
- @Override
- public void write(byte[] b, int offset, int length) throws IOException {
- super.write(b, offset, length);
- update(b, offset, length);
- }
-
- @Override
- public void putArchiveEntry(ArchiveEntry archiveEntry) throws IOException {
- if (archiveEntry instanceof MigrationZipArchiveEntry) {
- current = (MigrationZipArchiveEntry) archiveEntry;
- }
- super.putArchiveEntry(archiveEntry);
- }
-
- @Override
- public void closeArchiveEntry() throws IOException {
- reset();
- super.closeArchiveEntry();
- }
-
- private void reset() {
- current = null;
- }
-
- private void update(byte[] b, int offset, int length) {
- if (current != null) {
- current.update(b, offset, length);
- }
- }
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org