Hello,
The filter 'org.apache.tools.ant.filters.LineContains' does not work well
with big files.
There is a recursive call in read() to find a matching line, which causes a
stack overflow in the JVM when the file is too large.
I've patched the code of read() so that the loop to find a matching line
does not perform a recursive call.
It works for me.
Joined is the patch file of LineContains.java on the source of Ant1.5 beta1
(=the current CVS source as far as I can see through the CVS Web interface).
Can someone integrate this patch in the source tree?
Thanks,
Frederic
PS: this is the first time I submit a patch, please forgive me if this is
not the right procedure: I just tried to follow the guidelines.
--
Frederic Pesquet - ILOG S.A. (Sophia-Antipolis)
mail:[EMAIL PROTECTED]
*************************** diff file begin ***********************
--- LineContains.java.orig Fri May 24 11:13:42 2002
+++ LineContains.java Fri May 24 11:13:35 2002
@@ -143,21 +143,25 @@
line = line.substring(1);
}
} else {
- line = readLine();
- if (line == null) {
- ch = -1;
- } else {
- int containsSize = contains.size();
- for (int i = 0; i < containsSize; i++) {
- String containsStr = (String) contains.elementAt(i);
- if (line.indexOf(containsStr) == -1) {
- line = null;
- break;
- }
+ String goodLine=null;
+ line = readLine();
+ while((line!=null) && (goodLine==null))
+ {
+ goodLine=line;
+ int containsSize = contains.size();
+ for (int i = 0; i < containsSize; i++) {
+ String containsStr = (String) contains.elementAt(i);
+ if (line.indexOf(containsStr) == -1) {
+ goodLine = null;
+ break;
}
-
- return read();
}
+ line = readLine();
+ }
+ if (goodLine != null) {
+ line=goodLine;
+ return read();
+ };
}
return ch;
*************************** diff file end ***********************
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>