Fix for OpenJdk SocketImpl.

OpenJdk sockets start their life with a null FileDescriptor.

b/25805791 tracks fixing the SocketImpl

Change-Id: Ia14afda04aa0a109f944c549719ad50bb3aeadab
diff --git a/src/compat/java/org/conscrypt/Platform.java b/src/compat/java/org/conscrypt/Platform.java
index 7df17f7..dd0199d 100644
--- a/src/compat/java/org/conscrypt/Platform.java
+++ b/src/compat/java/org/conscrypt/Platform.java
@@ -66,7 +66,12 @@
             Class<?> c_socketImpl = Class.forName("java.net.SocketImpl");
             Field f_fd = c_socketImpl.getDeclaredField("fd");
             f_fd.setAccessible(true);
-            return (FileDescriptor) f_fd.get(socketImpl);
+            // OpenJdk sockets start their life with a null FD.
+            FileDescriptor ret = (FileDescriptor) f_fd.get(socketImpl);
+            if (ret == null) {
+                ret = new FileDescriptor();
+            }
+            return ret;
         } catch (Exception e) {
             throw new RuntimeException("Can't get FileDescriptor from socket", e);
         }
diff --git a/src/platform/java/org/conscrypt/Platform.java b/src/platform/java/org/conscrypt/Platform.java
index fde9acb..8b9d85e 100644
--- a/src/platform/java/org/conscrypt/Platform.java
+++ b/src/platform/java/org/conscrypt/Platform.java
@@ -81,7 +81,11 @@
     }
 
     public static FileDescriptor getFileDescriptor(Socket s) {
-        return s.getFileDescriptor$();
+        FileDescriptor ret = s.getFileDescriptor$();
+        if (ret == null) {
+            return new FileDescriptor();
+        }
+        return ret;
     }
 
     public static FileDescriptor getFileDescriptorFromSSLSocket(OpenSSLSocketImpl openSSLSocketImpl) {
@@ -91,7 +95,12 @@
             Object socketImpl = f_impl.get(openSSLSocketImpl);
             Field f_fd = SocketImpl.class.getDeclaredField("fd");
             f_fd.setAccessible(true);
-            return (FileDescriptor) f_fd.get(socketImpl);
+            // OpenJdk sockets start their life with a null FD.
+            FileDescriptor ret = (FileDescriptor) f_fd.get(socketImpl);
+            if (ret == null) {
+                ret = new FileDescriptor();
+            }
+            return ret;
         } catch (Exception e) {
             throw new RuntimeException("Can't get FileDescriptor from socket", e);
         }