8014341: Better service from Kerberos servers
Summary: read incoming data safely and take care of null return value
Reviewed-by: valeriep, ahgross
--- 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;
--- 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;
}
}