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, ≈163🔥, 1💬
Popular Posts:
Apache Log4j 1.2 Bridge allows applications coded to use Log4j 1.2 API to use Log4j 2 instead. Bytec...
JEuclid Source Code Files are provided the JEuclid GitHub Website . You can browse JEuclid Source Co...
JLayer is a library that decodes/plays/converts MPEG 1/2/2.5 Layer 1/2/3 (i.e. MP3) in real time for...
What Is jms.jar? I heard it's related to JMS (Java Message Service) 1.1? The if you have an jms.jar ...
JDK 6 tools.jar is the JAR file for JDK 6 tools. It contains Java classes to support different JDK t...