# HG changeset patch # User Jaroslav Tulach # Date 1399788497 -7200 # Node ID 7ba27baf5f3f3fa79493556b0f66dad9c6b9d228 # Parent 18ad02fdd1ef59463e98629be9f6540b060ad002 Prevent recursive loading of ZipResource class diff -r 18ad02fdd1ef -r 7ba27baf5f3f rt/vm/src/main/java/org/apidesign/vm4brwsr/ClassPath.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ClassPath.java Sun May 11 08:05:59 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ClassPath.java Sun May 11 08:08:17 2014 +0200 @@ -40,12 +40,14 @@ @JavaScriptBody(args = { "arr", "index", "value" }, body = "arr[index] = value; return value;") private static native Object set(Object arr, int index, Object value); + private static boolean doingToZip; public static byte[] loadFromCp(Object classpath, String res, int skip) throws IOException, ClassNotFoundException { for (int i = 0; i < length(classpath); i++) { Object c = at(classpath, i); - if (c instanceof String) { + if (c instanceof String && !doingToZip) { try { + doingToZip = true; String url = (String)c; final Bck2Brwsr.Resources z = toZip(url); c = set(classpath, i, z); @@ -59,6 +61,8 @@ } catch (IOException ex) { set(classpath, i, ex); log("Cannot load " + c + " - " + ex.getClass().getName() + ":" + ex.getMessage()); + } finally { + doingToZip = false; } } if (res != null) { @@ -117,7 +121,7 @@ @JavaScriptBody(args = { "arr", "len" }, body = "while (arr.length < len) arr.push(null); return arr;") private static native Object enlargeArray(Object arr, int len); - + private static Bck2Brwsr.Resources toZip(String path) throws IOException { URL u = new URL(path); byte[] zipData = (byte[]) u.getContent(new Class[]{byte[].class});