8014341: Better service from Kerberos servers
authorweijun
Wed, 08 May 2013 09:21:59 +0800
changeset 20804 18285d130365
parent 20803 140bc93ee613
child 20805 ae41216325dd
8014341: Better service from Kerberos servers Summary: read incoming data safely and take care of null return value Reviewed-by: valeriep, ahgross
jdk/src/share/classes/sun/security/krb5/KdcComm.java
jdk/src/share/classes/sun/security/krb5/internal/NetClient.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;
--- 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;
         }
     }