Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -115,4 +115,30 @@ public void testTypeSignature() {
assertEquals("Qqualifier.id;", Util.getSignature(type));
}

public void testGetSafeName() {
assertGetSafeNamePass("simple");
assertGetSafeNamePass("dir1/dir2/normal");
assertGetSafeNamePass("dir1/../unnormal");
assertGetSafeNamePass("dir1/dir2/.../unnormalTripple");
assertGetSafeNameFail("../slipped");
assertGetSafeNameFail("dir1/../../slipped");

// https://github.com/eclipse-jdt/eclipse.jdt.core/pull/2015#issuecomment-2009162226
assertGetSafeNamePass("overrides/..ROOT...override");
}

private void assertGetSafeNamePass(String entryName) {
String zipfileName = "any";
assertEquals(entryName, Util.getEntryName(zipfileName, new java.util.zip.ZipEntry(entryName)));
}

private void assertGetSafeNameFail(String entryName) {
String zipfileName = "any";
try {
String n = Util.getEntryName(zipfileName, new java.util.zip.ZipEntry(entryName));
assertFalse("Expected IllegalArgumentException but got " + n, true);
} catch (IllegalArgumentException expected) {
// expected
}
}
}
2 changes: 1 addition & 1 deletion org.eclipse.jdt.core/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.core; singleton:=true
Bundle-Version: 3.37.0.qualifier
Bundle-Version: 3.37.1.qualifier
Bundle-Activator: org.eclipse.jdt.core.JavaCore
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,10 +150,7 @@ protected boolean computeChildren(OpenableElementInfo info, IResource underlying
int length = version.length();
for (Enumeration<? extends ZipEntry> e= jar.entries(); e.hasMoreElements();) {
ZipEntry member= e.nextElement();
String name = member.getName();
if (name.contains("..")) { //$NON-NLS-1$
throw new IllegalArgumentException("Bad zip entry: "+name+" in "+jar.getName()); //$NON-NLS-1$ //$NON-NLS-2$
}
String name = Util.getEntryName(jar.getName(), member);
if (this.multiVersion && name.length() > (length + 2) && name.startsWith(version)) {
int end = name.indexOf('/', length);
if (end >= name.length()) continue;
Expand Down Expand Up @@ -194,6 +191,7 @@ protected boolean computeChildren(OpenableElementInfo info, IResource underlying
((JarPackageFragmentRootInfo) info).overriddenClasses = overridden;
return true;
}

protected IJavaElement[] createChildren(final HashtableOfArrayToObject rawPackageInfo) {
IJavaElement[] children;
// loop through all of referenced packages, creating package fragments if necessary
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3341,4 +3341,13 @@ public static IMethod findMethod(IType type, char[] selector, String[] paramType
}
return method;
}

public static String getEntryName(String zipfileName, ZipEntry entry) {
String entryName = entry.getName();
if (!java.nio.file.Path.of(zipfileName, entryName).normalize()
.startsWith(java.nio.file.Path.of(zipfileName).normalize())) {
throw new IllegalArgumentException("Bad zip entry: " + entryName + " in " + zipfileName); //$NON-NLS-1$ //$NON-NLS-2$
}
return entryName; // did not escape
}
}
2 changes: 1 addition & 1 deletion org.eclipse.jdt.core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<version>4.31.0-SNAPSHOT</version>
</parent>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.37.0-SNAPSHOT</version>
<version>3.37.1-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>

<properties>
Expand Down