Skip to content

Commit f9ae692

Browse files
BATIK-1347: Switch to full whitelist for rhino
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/batik/trunk@1904899 13f79535-47bb-0310-9956-ffa450edef68
1 parent 19192fa commit f9ae692

File tree

2 files changed

+8
-50
lines changed

2 files changed

+8
-50
lines changed

batik-script/src/main/java/org/apache/batik/script/rhino/RhinoClassShutter.java

Lines changed: 7 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ Licensed to the Apache Software Foundation (ASF) under one or more
3333
public class RhinoClassShutter implements ClassShutter {
3434
public static final List<String> WHITELIST = new ArrayList<>();
3535
static {
36-
WHITELIST.addAll(Arrays.asList("java.io.PrintStream", "java.lang.System", "java.net.URL"));
36+
WHITELIST.addAll(Arrays.asList("java.io.PrintStream", "java.lang.System", "java.net.URL", ".*Permission",
37+
"org.w3c.dom.*", "org.apache.batik.w3c.*", "org.apache.batik.anim.*", "org.apache.batik.dom.*",
38+
"org.apache.batik.css.*"));
3739
}
3840

3941
/*
@@ -63,56 +65,11 @@ public void test(String cls) {
6365
* Returns whether the given class is visible to scripts.
6466
*/
6567
public boolean visibleToScripts(String fullClassName) {
66-
if (!WHITELIST.contains(fullClassName) && !fullClassName.endsWith("Permission") && !fullClassName.startsWith("org.")) {
67-
return false;
68-
}
69-
70-
// Don't let them mess with script engine's internals.
71-
if (fullClassName.startsWith("org.mozilla.javascript"))
72-
return false;
73-
74-
if (fullClassName.startsWith("org.apache.batik.")) {
75-
// Just get package within batik.
76-
String batikPkg = fullClassName.substring(17);
77-
78-
// Don't let them mess with Batik script internals.
79-
if (batikPkg.startsWith("script"))
80-
return false;
81-
82-
// Don't let them get global structures.
83-
if (batikPkg.startsWith("apps"))
84-
return false;
85-
86-
// Don't let them get scripting stuff from bridge, but specifically
87-
// allow access to:
88-
//
89-
// o.a.b.bridge.ScriptingEnvironment$Window$IntervalScriptTimerTask
90-
// o.a.b.bridge.ScriptingEnvironment$Window$IntervalRunnableTimerTask
91-
// o.a.b.bridge.ScriptingEnvironment$Window$TimeoutScriptTimerTask
92-
// o.a.b.bridge.ScriptingEnvironment$Window$TimeoutRunnableTimerTask
93-
//
94-
// since objects of these classes are returned by setInterval() and
95-
// setTimeout().
96-
if (batikPkg.startsWith("bridge.")) {
97-
String batikBridgeClass = batikPkg.substring(7);
98-
if (batikBridgeClass.startsWith("ScriptingEnvironment")) {
99-
if (batikBridgeClass.startsWith("$Window$", 20)) {
100-
String c = batikBridgeClass.substring(28);
101-
if (c.equals("IntervalScriptTimerTask")
102-
|| c.equals("IntervalRunnableTimerTask")
103-
|| c.equals("TimeoutScriptTimerTask")
104-
|| c.equals("TimeoutRunnableTimerTask")) {
105-
return true;
106-
}
107-
}
108-
return false;
109-
}
110-
if (batikBridgeClass.startsWith("BaseScriptingEnvironment")) {
111-
return false;
112-
}
68+
for (String v : WHITELIST) {
69+
if (fullClassName.matches(v)) {
70+
return true;
11371
}
11472
}
115-
116-
return true;
73+
return false;
11774
}
11875
}

batik-test-old/src/test/java/org/apache/batik/script/rhino/RhinoClassShutterTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,6 @@ public void testImports() {
2929
RhinoClassShutter.WHITELIST.add(runtimeClass);
3030
Assert.assertTrue(new RhinoClassShutter().visibleToScripts(runtimeClass));
3131
RhinoClassShutter.WHITELIST.remove(runtimeClass);
32+
Assert.assertFalse(new RhinoClassShutter().visibleToScripts("org.x"));
3233
}
3334
}

0 commit comments

Comments
 (0)