# HG changeset patch # User weijun # Date 1367976119 -28800 # Node ID 18285d1303652a75f2841c354074bf48ba0b0eca # Parent 140bc93ee613ca74947ef0bbe6bb05904d5bc6eb 8014341: Better service from Kerberos servers Summary: read incoming data safely and take care of null return value Reviewed-by: valeriep, ahgross diff -r 140bc93ee613 -r 18285d130365 jdk/src/share/classes/sun/security/krb5/KdcComm.java --- a/jdk/src/share/classes/sun/security/krb5/KdcComm.java Fri May 31 21:25:42 2013 +0400 +++ b/jdk/src/share/classes/sun/security/krb5/KdcComm.java Wed May 08 09:21:59 2013 +0800 @@ -246,11 +246,15 @@ savedException = e; } } - if (ibuf == null && savedException != null) { - if (savedException instanceof IOException) { - throw (IOException) savedException; + if (ibuf == null) { + if (savedException != null) { + if (savedException instanceof IOException) { + throw (IOException) savedException; + } else { + throw (KrbException) savedException; + } } else { - throw (KrbException) savedException; + throw new IOException("Cannot get a KDC reply"); } } return ibuf; diff -r 140bc93ee613 -r 18285d130365 jdk/src/share/classes/sun/security/krb5/internal/NetClient.java --- a/jdk/src/share/classes/sun/security/krb5/internal/NetClient.java Fri May 31 21:25:42 2013 +0400 +++ b/jdk/src/share/classes/sun/security/krb5/internal/NetClient.java Wed May 08 09:21:59 2013 +0800 @@ -31,6 +31,8 @@ package sun.security.krb5.internal; +import sun.misc.IOUtils; + import java.io.*; import java.net.*; @@ -100,17 +102,15 @@ return null; } - byte data[] = new byte[len]; - count = readFully(data, len); - if (count != len) { + try { + return IOUtils.readFully(in, len, true); + } catch (IOException ioe) { if (Krb5.DEBUG) { System.out.println( ">>>DEBUG: TCPClient could not read complete packet (" + len + "/" + count + ")"); } return null; - } else { - return data; } }