Author: bodewig Date: Fri Sep 19 08:53:20 2008 New Revision: 697139 URL: http://svn.apache.org/viewvc?rev=697139&view=rev Log: properly handle non-standard chars in key alias. PR 45820.
Modified: ant/core/trunk/WHATSNEW ant/core/trunk/src/etc/testcases/taskdefs/signjar.xml ant/core/trunk/src/etc/testcases/testkeystore ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/IsSigned.java ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/SignJarTest.java Modified: ant/core/trunk/WHATSNEW URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=697139&r1=697138&r2=697139&view=diff ============================================================================== --- ant/core/trunk/WHATSNEW (original) +++ ant/core/trunk/WHATSNEW Fri Sep 19 08:53:20 2008 @@ -222,6 +222,10 @@ regardless of their configuration. Bugzilla Report 37970. + * <signjar> and <issigned> didn't handle aliases with characters other + than numbers, letters, hyphen or underscore properly. + Bugzilla Report 45820. + Other changes: -------------- Modified: ant/core/trunk/src/etc/testcases/taskdefs/signjar.xml URL: http://svn.apache.org/viewvc/ant/core/trunk/src/etc/testcases/taskdefs/signjar.xml?rev=697139&r1=697138&r2=697139&view=diff ============================================================================== --- ant/core/trunk/src/etc/testcases/taskdefs/signjar.xml (original) +++ ant/core/trunk/src/etc/testcases/taskdefs/signjar.xml Fri Sep 19 08:53:20 2008 @@ -80,6 +80,11 @@ <assertSigned/> </target> + <target name="invalidchars" depends="jar"> + <sign alias="[EMAIL PROTECTED]"/> + <assertSigned/> + </target> + <target name="maxmemory" depends="jar"> <sign maxmemory="128m"/> <assertSigned/> Modified: ant/core/trunk/src/etc/testcases/testkeystore URL: http://svn.apache.org/viewvc/ant/core/trunk/src/etc/testcases/testkeystore?rev=697139&r1=697138&r2=697139&view=diff ============================================================================== Binary files - no diff available. Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/IsSigned.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/IsSigned.java?rev=697139&r1=697138&r2=697139&view=diff ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/IsSigned.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/IsSigned.java Fri Sep 19 08:53:20 2008 @@ -23,6 +23,7 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; +import org.apache.tools.ant.taskdefs.ManifestTask; import org.apache.tools.ant.types.DataType; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; @@ -84,6 +85,7 @@ } return false; } + name = replaceInvalidChars(name); boolean shortSig = jarFile.getEntry(SIG_START + name.toUpperCase() + SIG_END) != null; @@ -131,4 +133,20 @@ } return r; } + + private static String replaceInvalidChars(final String name) { + StringBuffer sb = new StringBuffer(); + final int len = name.length(); + boolean changes = false; + for (int i = 0; i < len; i++) { + final char ch = name.charAt(i); + if (ManifestTask.VALID_ATTRIBUTE_CHARS.indexOf(ch) < 0) { + sb.append("_"); + changes = true; + } else { + sb.append(ch); + } + } + return changes ? sb.toString() : name; + } } Modified: ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/SignJarTest.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/SignJarTest.java?rev=697139&r1=697138&r2=697139&view=diff ============================================================================== --- ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/SignJarTest.java (original) +++ ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/SignJarTest.java Fri Sep 19 08:53:20 2008 @@ -70,6 +70,17 @@ sj.isSigned()); } + public void testInvalidChars() { + executeTarget("invalidchars"); + SignJarChild sj = new SignJarChild(); + sj.setAlias("[EMAIL PROTECTED]"); + sj.setKeystore("testkeystore"); + sj.setStorepass("apacheant"); + File jar = new File(getProject().getProperty("test.jar")); + sj.setJar(jar); + assertTrue(sj.isSigned()); + } + /** * subclass in order to get access to protected isSigned method if * tests and task come from different classloaders.