Skip to content

Commit 1e9c9fd

Browse files
committed
JavaEngine: fix critical buffering bug
This fixes Fiji bug #1029: http://fiji.sc/bugzilla/show_bug.cgi?id=1029 The CharBuffer has a position which does not get reset, and so length() returns 0 even when there is data in subsequent read passes. We avoid the issue by using a simple char[] instead of a new-fangled "object". Without this change, Java scripts longer than 1024 characters will produce exceptions like: java.lang.IndexOutOfBoundsException: start 0, end 582, s.length() 442 at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:453) at java.lang.StringBuilder.append(StringBuilder.java:179) at org.scijava.plugins.scripting.java.JavaEngine.getReaderContentsAsString(JavaEngine.java:904) at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:169)
1 parent 75731c9 commit 1e9c9fd

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import java.net.MalformedURLException;
4747
import java.net.URL;
4848
import java.net.URLClassLoader;
49-
import java.nio.CharBuffer;
5049
import java.util.ArrayList;
5150
import java.util.List;
5251
import java.util.jar.Attributes.Name;
@@ -896,7 +895,7 @@ private static String getReaderContentsAsString(Reader reader)
896895
return null;
897896
}
898897

899-
CharBuffer buffer = CharBuffer.allocate(1024);
898+
char[] buffer = new char[1024];
900899
StringBuilder builder = new StringBuilder();
901900

902901
int read;

0 commit comments

Comments
 (0)