You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2003/07/23 17:14:23 UTC

cvs commit: ant/src/testcases/org/apache/tools/ant/taskdefs PropertyTest.java

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: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Re: cvs commit: ant/src/testcases/org/apache/tools/ant/taskdefs PropertyTest.java

Posted by peter reilly <pe...@corvil.com>.
Excellent!
>   
>   
>   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)) {
>   
>   
>   



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org