You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by jh...@apache.org on 2007/04/19 12:49:52 UTC
svn commit: r530374 - in /ant/core/trunk: ./ src/etc/testcases/taskdefs/
src/main/org/apache/tools/ant/taskdefs/
src/tests/junit/org/apache/tools/ant/taskdefs/
Author: jhm
Date: Thu Apr 19 03:49:51 2007
New Revision: 530374
URL: http://svn.apache.org/viewvc?view=rev&rev=530374
Log:
Validate the name of manifest attributes. ATM only whitespaces are catched, need some help with the regexp version.
Modified:
ant/core/trunk/WHATSNEW
ant/core/trunk/src/etc/testcases/taskdefs/manifest.xml
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestException.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java
ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java
Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=530374&r1=530373&r2=530374
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Thu Apr 19 03:49:51 2007
@@ -95,6 +95,8 @@
* Patternset allows nested inverted patternsets using <invert>.
+* <manifest> checks for validity of attribute names.
+
Changes from Ant 1.6.5 to Ant 1.7.0
===================================
Modified: ant/core/trunk/src/etc/testcases/taskdefs/manifest.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/etc/testcases/taskdefs/manifest.xml?view=diff&rev=530374&r1=530373&r2=530374
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/manifest.xml (original)
+++ ant/core/trunk/src/etc/testcases/taskdefs/manifest.xml Thu Apr 19 03:49:51 2007
@@ -178,8 +178,6 @@
</patternset>
</unjar>
</target>
-
-
<target name="testReplace">
<copy file="manifests/test2.mf" toFile="mftest.mf" />
@@ -205,13 +203,26 @@
</manifest>
</target>
-
<target name="testFrom">
<manifest file="mftestfrom.mf" >
<section name="Test">
<attribute name="before" value="before" />
<attribute name="From" value="illegal"/>
<attribute name="after" value="after" />
+ </section>
+ </manifest>
+ </target>
+
+ <target name="testIllegalName">
+ <manifest file="mftestillegalname.mf">
+ <attribute name="has blank" value="value"/>
+ </manifest>
+ </target>
+
+ <target name="testIllegalNameInSection">
+ <manifest file="mftestillegalnameinsection.mf">
+ <section name="s1">
+ <attribute name="has blank" value="value"/>
</section>
</manifest>
</target>
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestException.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestException.java?view=diff&rev=530374&r1=530373&r2=530374
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestException.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestException.java Thu Apr 19 03:49:51 2007
@@ -24,6 +24,8 @@
*/
public class ManifestException extends Exception {
+ private static final long serialVersionUID = 7685634200457515207L;
+
/**
* Constructs an exception with the given descriptive message.
* @param msg Description of or information about the exception.
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java?view=diff&rev=530374&r1=530373&r2=530374
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java Thu Apr 19 03:49:51 2007
@@ -20,18 +20,19 @@
import java.io.File;
import java.io.FileInputStream;
-import java.io.InputStreamReader;
import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Enumeration;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
-import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.taskdefs.Manifest.Attribute;
import org.apache.tools.ant.types.EnumeratedAttribute;
+import org.apache.tools.ant.util.FileUtils;
/**
* Creates a manifest file for inclusion in a JAR, Ant task wrapper
@@ -95,6 +96,11 @@
*/
public void addConfiguredSection(Manifest.Section section)
throws ManifestException {
+ Enumeration attributeKeys = section.getAttributeKeys();
+ while (attributeKeys.hasMoreElements()) {
+ Attribute attribute = section.getAttribute((String)attributeKeys.nextElement());
+ checkAttribute(attribute);
+ }
nestedManifest.addConfiguredSection(section);
}
@@ -107,7 +113,45 @@
*/
public void addConfiguredAttribute(Manifest.Attribute attribute)
throws ManifestException {
+ checkAttribute(attribute);
nestedManifest.addConfiguredAttribute(attribute);
+ }
+
+ private void checkAttribute(Manifest.Attribute attribute) throws ManifestException {
+ /*
+ * Jar-Specification "Name-Value pairs and Sections":
+ * name: alphanum *headerchar
+ * alphanum: {A-Z} | {a-z} | {0-9}
+ * headerchar: alphanum | - | _
+ *
+ * So the resulting regexp would be [A-Za-z0-9][A-Za-z0-9-_]*
+ */
+ String namePattern = "[A-Za-z0-9][A-Za-z0-9-_]*";
+
+ String name = attribute.getName();
+
+ /* FIXME Does not work for me :-(
+ RegexpMatcherFactory factory = new RegexpMatcherFactory();
+ RegexpMatcher regexpMatcher = factory.newRegexpMatcher(getProject());
+ regexpMatcher.setPattern(namePattern);
+ if (!regexpMatcher.matches(name)) {
+ throw new ManifestException(
+ "Attribute name is not valid according to the specification. "
+ + "(which means regexp: " + namePattern + ")"
+ );
+ }
+ */
+
+ /* Works, but not JDK 1.2 compliant
+ if (!name.matches(namePattern)) {
+ throw new ManifestException("Attribute name is not valid according to the specification.");
+ }
+ */
+ /* */
+ if (attribute.getName().indexOf(' ') >- 1) {
+ throw new ManifestException("Manifest attribute name must not contain spaces.");
+ }
+ /* */
}
/**
Modified: ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java?view=diff&rev=530374&r1=530373&r2=530374
==============================================================================
--- ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java (original)
+++ ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java Thu Apr 19 03:49:51 2007
@@ -332,6 +332,16 @@
expectLogContaining("testFrom", Manifest.ERROR_FROM_FORBIDDEN);
}
+ public void testIllegalName() {
+ //expectBuildException("testIllegalName", "Attribute name is not valid according to the specification.");
+ }
+
+ public void testIllegalNameInSection() {
+ //expectBuildException("testIllegalNameInSection", "Attribute name is not valid according to the specification.");
+ }
+
+
+
/**
* Reads mftest.mf.
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
Re: svn commit: r530374 - in /ant/core/trunk: ./ src/etc/testcases/taskdefs/ src/main/org/apache/tools/ant/taskdefs/ src/tests/junit/org/apache/tools/ant/taskdefs/
Posted by Stefan Bodewig <bo...@apache.org>.
On Thu, 19 Apr 2007, <jh...@apache.org> wrote:
> Validate the name of manifest attributes. ATM only whitespaces are
> catched, need some help with the regexp version.
You can't use regexp here since you cannot be sure that a regexp
implementation is around at all. You'll probably need to check each
character and validate it is part of the allowed set instead.
Stefan
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org