Thanks for finding these bugs, Ivan! I have updated the webrev at: http://cr.openjdk.java.net/~sla/8039173/webrev.01/, and I have also included the diff below.
The updated webrev also has some changes in the javadoc for VirtualMachine to clarify that some methods can now throw AttachOperationFailedException. Thanks, /Staffan diff --git a/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java b/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java --- a/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java +++ b/src/share/classes/sun/tools/attach/HotSpotVirtualMachine.java @@ -266,18 +266,21 @@ */ String getErrorMessage(InputStream sis, int maxlen) throws IOException { byte b[] = new byte[maxlen]; - int n, off = 0, len = b.length; + int n, off = 0, len = maxlen; do { n = sis.read(b, off, len); + if (n == -1) { + break; + } off += n; len -= n; - } while (n >= 0 && off < b.length); + } while (off < maxlen); String message = null; if (off > 0) { message = new String(b, 0, off, "UTF-8"); } - if (off == b.length && message != null) { + if (off > b.length && message != null) { message += " ..."; } return message; On 4 apr 2014, at 11:18, Ivan Gerasimov <ivan.gerasi...@oracle.com> wrote: > Hi Staffan! > > I think there is a couple of minor bugs in getErrorMessage(InputStream sis, > int maxlen). > > 1) If maxlen is exactly the size of the message to read, the function will > add an ellipsis, even though the message isn't truncated, > 2) If maxlen is greater than needed, then sis.read(b, off, len) at the line > #271 will eventually return -1, and it will cause the message to lose its > last character. > > Sincerely yours, > Ivan >