Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
bsh2
bsh2-avoid-deserialization-xthis.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bsh2-avoid-deserialization-xthis.patch of Package bsh2
From 1ccc66bb693d4e46a34a904db8eeff07808d2ced Mon Sep 17 00:00:00 2001 From: Stian Soiland-Reyes <soiland-reyes@cs.manchester.ac.uk> Date: Mon, 1 Feb 2016 13:44:12 +0000 Subject: [PATCH] Avoid (de)serialization of XThis.Handler --- src/bsh/XThis.java | 67 +++++++++++----------- tests/junitTests/src/bsh/BshSerializationTest.java | 16 ++++++ 2 files changed, 48 insertions(+), 35 deletions(-) Index: BeanShell-2.0b5/src/bsh/XThis.java =================================================================== --- BeanShell-2.0b5.orig/src/bsh/XThis.java +++ BeanShell-2.0b5/src/bsh/XThis.java @@ -40,9 +40,9 @@ import java.io.*; import java.util.Hashtable; /** - XThis is a dynamically loaded extension which extends This.java and adds - support for the generalized interface proxy mechanism introduced in - JDK1.3. XThis allows bsh scripted objects to implement arbitrary + XThis is a dynamically loaded extension which extends This.java and adds + support for the generalized interface proxy mechanism introduced in + JDK1.3. XThis allows bsh scripted objects to implement arbitrary interfaces (be arbitrary event listener types). Note: This module relies on new features of JDK1.3 and will not compile @@ -65,10 +65,10 @@ public class XThis extends This */ Hashtable interfaces; - InvocationHandler invocationHandler = new Handler(); + transient InvocationHandler invocationHandler = new Handler(); - public XThis( NameSpace namespace, Interpreter declaringInterp ) { - super( namespace, declaringInterp ); + public XThis( NameSpace namespace, Interpreter declaringInterp ) { + super( namespace, declaringInterp ); } public String toString() { @@ -78,7 +78,7 @@ public class XThis extends This /** Get dynamic proxy for interface, caching those it creates. */ - public Object getInterface( Class clas ) + public Object getInterface( Class clas ) { return getInterface( new Class[] { clas } ); } @@ -86,7 +86,7 @@ public class XThis extends This /** Get dynamic proxy for interface, caching those it creates. */ - public Object getInterface( Class [] ca ) + public Object getInterface( Class [] ca ) { if ( interfaces == null ) interfaces = new Hashtable(); @@ -99,10 +99,10 @@ public class XThis extends This Object interf = interfaces.get( hashKey ); - if ( interf == null ) + if ( interf == null ) { ClassLoader classLoader = ca[0].getClassLoader(); // ? - interf = Proxy.newProxyInstance( + interf = Proxy.newProxyInstance( classLoader, ca, invocationHandler ); interfaces.put( hashKey, interf ); } @@ -116,51 +116,51 @@ public class XThis extends This Notes: Inner class for the invocation handler seems to shield this unavailable - interface from JDK1.2 VM... - + interface from JDK1.2 VM... + I don't understand this. JThis works just fine even if those classes aren't there (doesn't it?) This class shouldn't be loaded if an XThis isn't instantiated in NameSpace.java, should it? */ - class Handler implements InvocationHandler, java.io.Serializable + class Handler implements InvocationHandler { - public Object invoke( Object proxy, Method method, Object[] args ) + public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable { - try { + try { return invokeImpl( proxy, method, args ); } catch ( TargetError te ) { - // Unwrap target exception. If the interface declares that - // it throws the ex it will be delivered. If not it will be + // Unwrap target exception. If the interface declares that + // it throws the ex it will be delivered. If not it will be // wrapped in an UndeclaredThrowable throw te.getTarget(); } catch ( EvalError ee ) { // Ease debugging... // XThis.this refers to the enclosing class instance - if ( Interpreter.DEBUG ) + if ( Interpreter.DEBUG ) Interpreter.debug( "EvalError in scripted interface: " + XThis.this.toString() + ": "+ ee ); throw ee; } } - public Object invokeImpl( Object proxy, Method method, Object[] args ) - throws EvalError + public Object invokeImpl( Object proxy, Method method, Object[] args ) + throws EvalError { String methodName = method.getName(); CallStack callstack = new CallStack( namespace ); /* - If equals() is not explicitly defined we must override the + If equals() is not explicitly defined we must override the default implemented by the This object protocol for scripted - object. To support XThis equals() must test for equality with + object. To support XThis equals() must test for equality with the generated proxy object, not the scripted bsh This object; - otherwise callers from outside in Java will not see a the + otherwise callers from outside in Java will not see a the proxy object as equal to itself. */ BshMethod equalsMethod = null; try { - equalsMethod = namespace.getMethod( + equalsMethod = namespace.getMethod( "equals", new Class [] { Object.class } ); } catch ( UtilEvalError e ) {/*leave null*/ } if ( methodName.equals("equals" ) && equalsMethod == null ) { @@ -169,12 +169,12 @@ public class XThis extends This } /* - If toString() is not explicitly defined override the default + If toString() is not explicitly defined override the default to show the proxy interfaces. */ BshMethod toStringMethod = null; try { - toStringMethod = + toStringMethod = namespace.getMethod( "toString", new Class [] { } ); } catch ( UtilEvalError e ) {/*leave null*/ } @@ -182,20 +182,17 @@ public class XThis extends This { Class [] ints = proxy.getClass().getInterfaces(); // XThis.this refers to the enclosing class instance - StringBuffer sb = new StringBuffer( + StringBuffer sb = new StringBuffer( XThis.this.toString() + "\nimplements:" ); for(int i=0; i<ints.length; i++) - sb.append( " "+ ints[i].getName() + sb.append( " "+ ints[i].getName() + ((ints.length > 1)?",":"") ); return sb.toString(); } Class [] paramTypes = method.getParameterTypes(); - return Primitive.unwrap( + return Primitive.unwrap( invokeMethod( methodName, Primitive.wrap(args, paramTypes) ) ); } }; } - - -
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor