From 867e7804afef05234396aa619a7f5d3707f28cf8 Mon Sep 17 00:00:00 2001 From: Sam Blackshear Date: Tue, 24 Nov 2015 13:35:08 -0800 Subject: [PATCH] implementing abstract methods to avoid false negatives due to dynamic dispatch issues Reviewed By: jeremydubreil Differential Revision: D2680252 fb-gh-sync-id: bc87bb3 --- .../java/src/javax/net/SocketFactory.java | 23 +++++++++++++++++++ .../src/javax/net/ssl/SSLSocketFactory.java | 9 ++++++++ 2 files changed, 32 insertions(+) diff --git a/infer/models/java/src/javax/net/SocketFactory.java b/infer/models/java/src/javax/net/SocketFactory.java index 277a0947a..d0b360f22 100644 --- a/infer/models/java/src/javax/net/SocketFactory.java +++ b/infer/models/java/src/javax/net/SocketFactory.java @@ -9,6 +9,8 @@ package javax.net; +import java.io.IOException; +import java.net.InetAddress; import java.net.Socket; import com.facebook.infer.models.InferBuiltins; @@ -38,4 +40,25 @@ public class SocketFactory { return socket; } + // the methods below are abstract methods in the actual Java class, but we need to implement it + // explicitly due to Infer's dynamic dispatch woes + public Socket createSocket(InetAddress addr, int i) throws IOException { + return this.createSocket(); + } + + public Socket createSocket(InetAddress addr1, int i, InetAddress addr2, int j) + throws IOException { + + return this.createSocket(); + } + + public Socket createSocket(String s, int i) throws IOException { + return this.createSocket(); + + } + + public Socket createSocket(String s, int i, InetAddress addr, int j) throws IOException { + return this.createSocket(); + } + } diff --git a/infer/models/java/src/javax/net/ssl/SSLSocketFactory.java b/infer/models/java/src/javax/net/ssl/SSLSocketFactory.java index eb6235642..b5225ac4c 100644 --- a/infer/models/java/src/javax/net/ssl/SSLSocketFactory.java +++ b/infer/models/java/src/javax/net/ssl/SSLSocketFactory.java @@ -23,16 +23,25 @@ public class SSLSocketFactory extends SocketFactory { return super.createSocket(); } + @Override public Socket createSocket(InetAddress addr1, int i, InetAddress addr2, int j) throws IOException { return super.createSocket(); } + @Override public Socket createSocket(String s, int i) throws IOException { return super.createSocket(); } + @Override public Socket createSocket(String s, int i, InetAddress addr, int j) throws IOException { return super.createSocket(); } + // the method below is an abstract method in the actual Java class, but we need to implement it + // explicitly due to Infer's dynamic dispatch woes + public Socket createSocket(Socket s, String host, int i, boolean b) throws IOException { + return super.createSocket(); + } + }