bodewig 2003/07/23 08:14:22 Modified: src/etc/testcases/taskdefs property.xml src/main/org/apache/tools/ant/taskdefs Property.java src/testcases/org/apache/tools/ant/taskdefs PropertyTest.java Added: src/etc/testcases/taskdefs property4.properties Log: resolveAllProperties would be caught in an endless loop when trying to expand b -> ${a} -> ${a}. It would keep replacing ${a} for ${a} as it only detected a circular reference if the expansion pointed back to b. PR: 21825 Revision Changes Path 1.7 +5 -0 ant/src/etc/testcases/taskdefs/property.xml Index: property.xml =================================================================== RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/property.xml,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- property.xml 18 Jun 2003 08:10:21 -0000 1.6 +++ property.xml 23 Jul 2003 15:14:18 -0000 1.7 @@ -36,4 +36,9 @@ <property name="someprop" value="value" prefix="prefix"/> </target> + <!-- caused an endless loop, PR 21825 --> + <target name="testCircularReference"> + <property file="property4.properties"/> + </target> + </project> 1.1 ant/src/etc/testcases/taskdefs/property4.properties Index: property4.properties =================================================================== a=${a} b=${a}/b 1.65 +4 -1 ant/src/main/org/apache/tools/ant/taskdefs/Property.java Index: Property.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Property.java,v retrieving revision 1.64 retrieving revision 1.65 diff -u -r1.64 -r1.65 --- Property.java 19 Jul 2003 11:20:13 -0000 1.64 +++ Property.java 23 Jul 2003 15:14:19 -0000 1.65 @@ -573,6 +573,8 @@ String value = props.getProperty(name); boolean resolved = false; + Vector expandedReferences = new Vector(); + expandedReferences.addElement(name); while (!resolved) { Vector fragments = new Vector(); Vector propertyRefs = new Vector(); @@ -588,11 +590,12 @@ String fragment = (String) i.nextElement(); if (fragment == null) { String propertyName = (String) j.nextElement(); - if (propertyName.equals(name)) { + if (expandedReferences.contains(propertyName)) { throw new BuildException("Property " + name + " was circularly " + "defined."); } + expandedReferences.addElement(propertyName); fragment = getProject().getProperty(propertyName); if (fragment == null) { if (props.containsKey(propertyName)) { 1.11 +12 -0 ant/src/testcases/org/apache/tools/ant/taskdefs/PropertyTest.java Index: PropertyTest.java =================================================================== RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/PropertyTest.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- PropertyTest.java 23 Jun 2003 09:07:30 -0000 1.10 +++ PropertyTest.java 23 Jul 2003 15:14:19 -0000 1.11 @@ -116,4 +116,16 @@ fail("Did not throw exception on invalid use of prefix"); } + public void testCircularReference() { + try { + executeTarget("testCircularReference"); + } catch (BuildException e) { + assertEquals("Circular definition not detected - ", true, + e.getMessage().indexOf("was circularly defined") + != -1); + return; + } + fail("Did not throw exception on circular exception"); + } + }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]