Browse Source

Bugzilla: 43324 stackoverflow

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@573537 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 18 years ago
parent
commit
c7e4640df9
4 changed files with 64 additions and 6 deletions
  1. +3
    -0
      WHATSNEW
  2. +8
    -6
      src/main/org/apache/tools/ant/taskdefs/MacroInstance.java
  3. +2
    -0
      src/tests/antunit/bugfixes/README.txt
  4. +51
    -0
      src/tests/antunit/bugfixes/bugzilla-43324-stackoverflow-test.xml

+ 3
- 0
WHATSNEW View File

@@ -160,6 +160,9 @@ Fixed bugs:
* FilterMapper could throw an NPE.
Bugzilla 43292.

* Regession nested macrodefs with elements could cause StackOverFlow.
Bugzilla 43324.

Other changes:
--------------
* <script> now has basic support for JavaFX scripts


+ 8
- 6
src/main/org/apache/tools/ant/taskdefs/MacroInstance.java View File

@@ -242,7 +242,7 @@ public class MacroInstance extends Task implements DynamicAttribute, TaskContain
this.text = text;
}

private UnknownElement copy(UnknownElement ue) {
private UnknownElement copy(UnknownElement ue, boolean nested) {
UnknownElement ret = new UnknownElement(ue.getTag());
ret.setNamespace(ue.getNamespace());
ret.setProject(getProject());
@@ -281,8 +281,8 @@ public class MacroInstance extends Task implements DynamicAttribute, TaskContain
}
MacroDef.TemplateElement templateElement =
(MacroDef.TemplateElement) getNsElements().get(tag);
if (templateElement == null) {
UnknownElement child = copy(unknownElement);
if (templateElement == null || nested) {
UnknownElement child = copy(unknownElement, nested);
rc.addChild(child.getWrapper());
ret.addChild(child);
} else if (templateElement.isImplicit()) {
@@ -293,7 +293,8 @@ public class MacroInstance extends Task implements DynamicAttribute, TaskContain
}
for (Iterator i = unknownElements.iterator();
i.hasNext();) {
UnknownElement child = copy((UnknownElement) i.next());
UnknownElement child
= copy((UnknownElement) i.next(), true);
rc.addChild(child.getWrapper());
ret.addChild(child);
}
@@ -317,7 +318,8 @@ public class MacroInstance extends Task implements DynamicAttribute, TaskContain
if (list != null) {
for (Iterator i = list.iterator();
i.hasNext();) {
UnknownElement child = copy((UnknownElement) i.next());
UnknownElement child
= copy((UnknownElement) i.next(), true);
rc.addChild(child.getWrapper());
ret.addChild(child);
}
@@ -386,7 +388,7 @@ public class MacroInstance extends Task implements DynamicAttribute, TaskContain
}

// need to set the project on unknown element
UnknownElement c = copy(macroDef.getNestedTask());
UnknownElement c = copy(macroDef.getNestedTask(), false);
c.init();
try {
c.perform();


+ 2
- 0
src/tests/antunit/bugfixes/README.txt View File

@@ -0,0 +1,2 @@
This directory contains tests for the bugs
that have been fixed.

+ 51
- 0
src/tests/antunit/bugfixes/bugzilla-43324-stackoverflow-test.xml View File

@@ -0,0 +1,51 @@
<project name="length-test" default="antunit"
xmlns:au="antlib:org.apache.ant.antunit">

<import file="../antunit-base.xml" />

<target name="testnested">
<macrodef name="root-macro">
<element name="sub-tasks" optional="false" />

<sequential>
<!-- do stuff -->
<sub-tasks />
</sequential>
</macrodef>

<macrodef name="used-macro-a">
<element name="a-sub-tasks" optional="false" implicit="true" />

<sequential>
<root-macro>
<sub-tasks>
<!-- do stuff -->
<a-sub-tasks />
</sub-tasks>
</root-macro>
</sequential>
</macrodef>

<macrodef name="used-macro-b">
<element name="b-sub-tasks" optional="false" implicit="true" />

<sequential>
<used-macro-a>
<root-macro>
<sub-tasks>
<!-- do stuff -->
<b-sub-tasks />
</sub-tasks>
</root-macro>
</used-macro-a>
</sequential>
</macrodef>

<used-macro-b>
<echo message="Test B" />
</used-macro-b>

<au:assertLogContains text="Test B"/>
</target>

</project>

Loading…
Cancel
Save