Fixed OOM reported by huxi.
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index 1167034..e4ab6a0 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -812,11 +812,11 @@
if (word.length() > max || current + word.length() <= max) {
out.append(" ").append(word);
current += word.length() + 1;
- i++;
} else {
- out.append("\n").append(spaces(indent));
+ out.append("\n").append(spaces(indent + 1)).append(word);
current = indent;
}
+ i++;
}
}
diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java
index 8e2a48a..9dabd57 100644
--- a/src/test/java/com/beust/jcommander/JCommanderTest.java
+++ b/src/test/java/com/beust/jcommander/JCommanderTest.java
@@ -32,6 +32,7 @@
import com.beust.jcommander.args.ArgsMainParameter1;
import com.beust.jcommander.args.ArgsMaster;
import com.beust.jcommander.args.ArgsMultipleUnparsed;
+import com.beust.jcommander.args.ArgsOutOfMemory;
import com.beust.jcommander.args.ArgsPrivate;
import com.beust.jcommander.args.ArgsRequired;
import com.beust.jcommander.args.ArgsSlave;
@@ -448,9 +449,15 @@
jc.parse(new String[] { "f1", "f2" });
}
+ @Test(description = "This used to run out of memory")
+ public void oom() {
+ JCommander jc = new JCommander(new ArgsOutOfMemory());
+ jc.usage(new StringBuilder());
+ }
+
@Test(enabled = false)
public static void main(String[] args) {
- new JCommander(new Help()).usage();
+ new JCommanderTest().oom();
// new JCommanderTest().booleanArity1();
// ArgsLongDescription a = new ArgsLongDescription();
// JCommander jc = new JCommander(a);
diff --git a/src/test/java/com/beust/jcommander/args/ArgsOutOfMemory.java b/src/test/java/com/beust/jcommander/args/ArgsOutOfMemory.java
new file mode 100644
index 0000000..f059ebb
--- /dev/null
+++ b/src/test/java/com/beust/jcommander/args/ArgsOutOfMemory.java
@@ -0,0 +1,13 @@
+package com.beust.jcommander.args;
+
+import com.beust.jcommander.Parameter;
+
+public class ArgsOutOfMemory
+{
+ @Parameter(names = { "-p", "--pattern" },
+ description = "pattern used by 'tail'. See http://logback.qos.ch/manual/layouts.html#ClassicPatternLayout and http://logback.qos.ch/manual/layouts.html#AccessPatternLayout")
+ public String pattern;
+
+ @Parameter(names = "-q", description = "Filler arg")
+ public String filler;
+}