Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (102)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (322)
Collections:
Other Resources:
Rhino JavaScript Java Library Source Code
Rhino JavaScript Java Library is an open-source implementation of JavaScript
written entirely in Java.
Rhino JavaScript Java Library Source Code files are provided in binary package (rhino-1.7.14.zip).
You can also browse the source code below:
✍: FYIcenter.com
⏎ org/mozilla/javascript/SecureCaller.java
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.javascript;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.lang.reflect.UndeclaredThrowableException;
import java.net.URL;
import java.security.AccessController;
import java.security.CodeSource;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.security.SecureClassLoader;
import java.util.Map;
import java.util.WeakHashMap;
/**
* @author Attila Szegedi
*/
public abstract class SecureCaller
{
private static final byte[] secureCallerImplBytecode = loadBytecode();
// We're storing a CodeSource -> (ClassLoader -> SecureRenderer), since we
// need to have one renderer per class loader. We're using weak hash maps
// and soft references all the way, since we don't want to interfere with
// cleanup of either CodeSource or ClassLoader objects.
private static final Map<CodeSource,Map<ClassLoader,SoftReference<SecureCaller>>>
callers =
new WeakHashMap<CodeSource,Map<ClassLoader,SoftReference<SecureCaller>>>();
public abstract Object call(Callable callable, Context cx,
Scriptable scope, Scriptable thisObj, Object[] args);
/**
* Call the specified callable using a protection domain belonging to the
* specified code source.
*/
static Object callSecurely(final CodeSource codeSource, Callable callable,
Context cx, Scriptable scope, Scriptable thisObj, Object[] args)
{
final Thread thread = Thread.currentThread();
// Run in doPrivileged as we might be checked for "getClassLoader"
// runtime permission
final ClassLoader classLoader = (ClassLoader)AccessController.doPrivileged(
new PrivilegedAction<Object>() {
@Override
public Object run() {
return thread.getContextClassLoader();
}
});
Map<ClassLoader,SoftReference<SecureCaller>> classLoaderMap;
synchronized(callers)
{
classLoaderMap = callers.get(codeSource);
if(classLoaderMap == null)
{
classLoaderMap = new WeakHashMap<ClassLoader,SoftReference<SecureCaller>>();
callers.put(codeSource, classLoaderMap);
}
}
SecureCaller caller;
synchronized(classLoaderMap)
{
SoftReference<SecureCaller> ref = classLoaderMap.get(classLoader);
if (ref != null) {
caller = ref.get();
} else {
caller = null;
}
if (caller == null) {
try
{
// Run in doPrivileged as we'll be checked for
// "createClassLoader" runtime permission
caller = (SecureCaller)AccessController.doPrivileged(
new PrivilegedExceptionAction<Object>()
{
@Override
public Object run() throws Exception
{
ClassLoader effectiveClassLoader;
Class<?> thisClass = getClass();
if(classLoader.loadClass(thisClass.getName()) != thisClass) {
effectiveClassLoader = thisClass.getClassLoader();
} else {
effectiveClassLoader = classLoader;
}
SecureClassLoaderImpl secCl =
new SecureClassLoaderImpl(effectiveClassLoader);
Class<?> c = secCl.defineAndLinkClass(
SecureCaller.class.getName() + "Impl",
secureCallerImplBytecode, codeSource);
return c.newInstance();
}
});
classLoaderMap.put(classLoader, new SoftReference<SecureCaller>(caller));
}
catch(PrivilegedActionException ex)
{
throw new UndeclaredThrowableException(ex.getCause());
}
}
}
return caller.call(callable, cx, scope, thisObj, args);
}
private static class SecureClassLoaderImpl extends SecureClassLoader
{
SecureClassLoaderImpl(ClassLoader parent)
{
super(parent);
}
Class<?> defineAndLinkClass(String name, byte[] bytes, CodeSource cs)
{
Class<?> cl = defineClass(name, bytes, 0, bytes.length, cs);
resolveClass(cl);
return cl;
}
}
private static byte[] loadBytecode()
{
return (byte[])AccessController.doPrivileged(new PrivilegedAction<Object>()
{
@Override
public Object run()
{
return loadBytecodePrivileged();
}
});
}
private static byte[] loadBytecodePrivileged()
{
URL url = SecureCaller.class.getResource("SecureCallerImpl.clazz");
try
{
InputStream in = url.openStream();
try
{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
for(;;)
{
int r = in.read();
if(r == -1)
{
return bout.toByteArray();
}
bout.write(r);
}
}
finally
{
in.close();
}
}
catch(IOException e)
{
throw new UndeclaredThrowableException(e);
}
}
}
⏎ org/mozilla/javascript/SecureCaller.java
Or download all of them as a single archive file:
File name: rhino-1.7.14-sources.jar File size: 1029165 bytes Release date: 2022-01-06 Download
⇒ Example code to Test rhino-runtime-1.7.14.jar
⇐ Download Rhino JavaScript Binary Package
2022-05-03, ≈102🔥, 1💬
Popular Posts:
What Is ojdbc5.jar for Oracle 11g R1? ojdbc5.jar for Oracle 11g R1 is the JAR files of ojdbc.jar, JD...
What Is log4j-1.2.15.jar? I got the JAR file from apache-log4j-1.2.15.zip. log4j-1.2.15.jar is the v...
Apache Commons Codec library provides implementations of common encoders and decoders such as Base64...
JDK 11 jdk.jdi.jmod is the JMOD file for JDK 11 JDI (Java Debug Interface) tool. JDK 11 JDI tool com...
jTDS JDBC Driver Source Code Files are provided in the source package file, jtds-1.3.1-fyi.zip. You ...