changeset 6345:6e1204adde28

8014341: Better service from Kerberos servers Summary: read incoming data safely and take care of null return value Reviewed-by: valeriep, ahgross
author weijun
date Wed, 08 May 2013 09:21:59 +0800
parents 47a9969695e5
children daae7d66b624
files src/share/classes/sun/security/krb5/KdcComm.java src/share/classes/sun/security/krb5/internal/NetClient.java
diffstat 2 files changed, 13 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/sun/security/krb5/KdcComm.java	Tue May 21 13:56:39 2013 +0400
+++ b/src/share/classes/sun/security/krb5/KdcComm.java	Wed May 08 09:21:59 2013 +0800
@@ -239,11 +239,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/src/share/classes/sun/security/krb5/internal/NetClient.java	Tue May 21 13:56:39 2013 +0400
+++ b/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.*;
 
@@ -102,17 +104,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;
         }
     }