diff options
author | igerasim <none@none> | 2015-07-31 00:48:36 +0300 |
---|---|---|
committer | igerasim <none@none> | 2015-07-31 00:48:36 +0300 |
commit | 8410398be01e2a008839eb7c37899b53076deedf (patch) | |
tree | c5461368f71e6c548b7f693cf9c282b62a7e5532 /src/share/classes/java/rmi | |
parent | 2bd6501f42e2700b7e23e050f8b8ff98cc753c17 (diff) | |
download | jdk8u_jdk-8410398be01e2a008839eb7c37899b53076deedf.tar.gz |
8076339: Better handling of remote object invocation
Reviewed-by: asmotrak, igerasim, skoivu
Diffstat (limited to 'src/share/classes/java/rmi')
-rw-r--r-- | src/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java b/src/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java index e2c41ac271..c17eac6cfe 100644 --- a/src/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java +++ b/src/share/classes/java/rmi/server/RemoteObjectInvocationHandler.java @@ -162,6 +162,14 @@ public class RemoteObjectInvocationHandler 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 && @@ -186,11 +194,13 @@ public class RemoteObjectInvocationHandler } 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); |