RFR: 8039173 Propagate errors from Diagnostic Commands as exceptions in the attach framework

Ivan Gerasimov ivan.gerasimov at oracle.com
Fri Apr 4 11:55:12 UTC 2014


Thank you Staffan for fixing them!

But I'm afraid that now the function will never add ellipsis to the 
message, even if it gets truncated.

Sincerely yours,
Ivan

On 04.04.2014 15:47, Staffan Larsen wrote:
> 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.gerasimov at 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
>>
>
>



More information about the serviceability-dev mailing list