# HG changeset patch # User smarks # Date 1437428240 25200 # Node ID 6fb299910fb895a57b0beb5cff9f8c5ddac115a7 # Parent 052d130b84ed497eef2acf682db0bae846e05088 8076339: Better handling of remote object invocation Reviewed-by: asmotrak, igerasim, skoivu diff -r 052d130b84ed -r 6fb299910fb8 jdk/src/java.rmi/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java --- a/jdk/src/java.rmi/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java Mon Jul 20 01:45:23 2015 +0000 +++ b/jdk/src/java.rmi/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java Mon Jul 20 14:37:20 2015 -0700 @@ -145,6 +145,14 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + if (! Proxy.isProxyClass(proxy.getClass())) { + throw new IllegalArgumentException("not a proxy"); + } + + if (Proxy.getInvocationHandler(proxy) != this) { + throw new IllegalArgumentException("handler mismatch"); + } + if (method.getDeclaringClass() == Object.class) { return invokeObjectMethod(proxy, method, args); } else if ("finalize".equals(method.getName()) && method.getParameterCount() == 0) { @@ -168,11 +176,13 @@ } else if (name.equals("equals")) { Object obj = args[0]; + InvocationHandler hdlr; return proxy == obj || (obj != null && Proxy.isProxyClass(obj.getClass()) && - equals(Proxy.getInvocationHandler(obj))); + (hdlr = Proxy.getInvocationHandler(obj)) instanceof RemoteObjectInvocationHandler && + this.equals(hdlr)); } else if (name.equals("toString")) { return proxyToString(proxy);