Author: jhm Date: Thu Apr 19 22:59:51 2007 New Revision: 530662 URL: http://svn.apache.org/viewvc?view=rev&rev=530662 Log: Check every single character instead of trying using regexp's.
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java 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=530662&r1=530661&r2=530662 ============================================================================== --- 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 22:59:51 2007 @@ -46,6 +46,13 @@ public class ManifestTask extends Task { /** + * Specifies the valid characters which can be used in attribute names. + * [EMAIL PROTECTED] + */ + public final String VALID_ATTRIBUTE_CHARS = + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345679-_"; + + /** * Holds the real data. */ private Manifest nestedManifest = new Manifest(); @@ -117,43 +124,39 @@ nestedManifest.addConfiguredAttribute(attribute); } + /** + * Checks the attribute agains the Jar-specification. + * + * Jar-Specification <i>"Name-Value pairs and Sections"</i>: <pre> + * name: alphanum *headerchar + * alphanum: {A-Z} | {a-z} | {0-9} + * headerchar: alphanum | - | _ + * </pre> + * So the resulting regexp would be <tt>[A-Za-z0-9][A-Za-z0-9-_]*</tt>. + * + * Because of JDK 1.2 compliance and the possible absence of a + * regexp matcher we can not use regexps here. Instead we have to + * check each character. + * + * @param attribute The attribute to check + * @throws ManifestException if the check fails + */ 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(); + char ch = name.charAt(0); - /* 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 + ")" - ); + if (ch == '-' || ch == '_') { + throw new ManifestException("Manifest attribute names must not contain '" + ch + "'"); } - */ - /* 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."); + for (int i = 0; i < name.length(); i++) { + ch = name.charAt(i); + if (VALID_ATTRIBUTE_CHARS.indexOf(ch) < 0) { + throw new ManifestException("Manifest attribute names must not contain '" + ch + "'"); + } } - /* */ } - + /** * The name of the manifest file to create/update. * Required if used as a task. @@ -256,5 +259,4 @@ } } } - } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]