[rfc][icedtea-web] Reproducer for: Ignore invalid .jar files in applets

Adam Domurad adomurad at redhat.com
Fri Jun 15 07:06:11 PDT 2012


Just a summary: The first test is supposed to catch a ZipException that
occurs because jnlp files don't silently ignore invalid .jar files. The
second test test is supposed to run correctly. This is the desired
behaviour.

Doh. Forgot it wasn't enough to construct a thread.

I was thinking that the timeout was still needed because the jnlp file
class would never run - but unlike the browser start it does close
automatically, you're right. 
The only issue is now the jnlp pops up a window that requires user
confirmation, without javawsHeadless... the test behaves correctly with
javawsHeadless. 

Hopefully this version is better, and you can instruct me on alternatves
to using javawsHeadless if it should not be used ?

On Fri, 2012-06-15 at 09:33 +0200, Jiri Vanek wrote:
> On 06/14/2012 09:26 PM, Adam Domurad wrote:
> > Updated reproducer. Hopefully this one is good for HEAD ?
> 
> nn... You have avoid all my questions :)
> 
> Mainly - you have added killer threads, but you are never starting them.
> I assume thats the reasdon why you still neeed timout in first thread. So start the killers and get 
> rid of timeout!
> 
> 
> J.
> >
> > On Mon, 2012-06-04 at 10:42 +0200, Jiri Vanek wrote:
> >> >  On 06/01/2012 04:45 PM, Adam Domurad wrote:
> >>> >  >  Here's is a reproducer for the previous patch (which still needs a
> >>> >  >  reviewer btw).
> >> >  Thanx a lot for test! Few hint inline.
> >> >
> >>> >  >
> >>> >  >  ChangeLog:
> >>> >  >  2012-06-01  Adam Domurad<adomurad at redhat.com>
> >>> >  >
> >>> >  >  	*
> >>> >  >  tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/AppletReadsInvalidJar.html:
> >>> >  >  	*
> >>> >  >  tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/AppletReadsInvalidJar.jnlp:
> >>> >  >  	* tests/jnlp_tests/simple/AppletReadsInvalidJar/srcs/Valid.java:
> >>> >  >  	*
> >>> >  >  tests/jnlp_tests/simple/AppletReadsInvalidJar/testcases/AppletReadsInvalidJarTests.java:
> >>> >  >  	Reproducer for checking behaviour of existing but invalid (corrupt,
> >>> >  >  	etc) jar files in .jnlp files (should fail) and applet tags (should be
> >>> >  >  	ignored)
> >> >
> >> >  It is not clear whether the test should fail, or the test should pass with failure of application. See below for more comments on this topic.
> >>> >  >
> >>> >  >  On Mon, 2012-05-28 at 16:23 -0400, Adam Domurad wrote:
> >> >
> >> >  ...snip...
> >> >
> >>> >  >  +exception statement from your version.
> >>> >  >  + */
> >>> >  >  +public class Valid extends Applet {
> >>> >  >  +    @Override
> >>> >  >  +    public void init() {
> >>> >  >  +        System.out.println("Program Executed Correctly.");
> >>> >  >  +    }
> >>> >  >  +}
> >> >
> >> >  You do not need to create such a simple application each time, but you can reuse one of the existing. But for this case we can probably live with new one (depends on you)
> >> >
> >>> >  >  diff --git a/tests/jnlp_tests/simple/AppletReadsInvalidJar/testcases/AppletReadsInvalidJarTests.java b/tests/jnlp_tests/simple/AppletReadsInvalidJar/testcases/AppletReadsInvalidJarTests.java
> >>> >  >  new file mode 100644
> >> >
> >> >  ...snip...
> >> >
> >>> >  >  +
> >>> >  >  +    /*This SHOULD NOT execute the applet!*/
> >>> >  >  +    @Test
> >>> >  >  +    public void AppletJNLPTest() throws Exception {
> >>> >  >  +        long previous_timeout = ServerAccess.PROCESS_TIMEOUT;
> >>> >  >  +        /*This test should be short, so set to 2 seconds*/
> >>> >  >  +        ServerAccess.PROCESS_TIMEOUT = 2 * 1000;
> >>> >  >  +
> >>> >  >  +        ServerAccess.ProcessResult pr = server.executeJavawsHeadless("/AppletReadsInvalidJar.jnlp");
> >>> >  >  +
> >>> >  >  +        String s0 = "Program Executed Correctly.";
> >>> >  >  +        Assert.assertTrue("AppletTakesLastParam stdout should NOT contain " + s0 + ", but did (applet should not have ran!).", !pr.stdout.contains(s0));
> >>> >  >  +
> >>> >  >  +        ServerAccess.PROCESS_TIMEOUT = previous_timeout;
> >>> >  >  +    }
> >> >
> >> >  In this case you are launching applet in javaws. It will not launch application. Is this time outing necessary?  If the applet in javaws is not laoded at all, then
> >> >  javaws should be terminated or not?
> >> >  Also there is small complex  - applets should be launched_without_  hedaless, but if exception is launched in not-headless mode, then dialog-window keeps hanging n the air.
> >> >
> >> >  If timeout is really necessary (killer thread is not enough I guess)  then the restore of original one must be in finally block.
> >> >  Although to check the type of exception can be very handy.
> >> >
> >> >  Last comment here - the issue is never going to be fixed (applet by jnlp) correct? In case that it should be fixed n some future, then this test should be failing (@KnownToFail)
> >> >
> >> >
> >> >
> >>> >  >  +
> >>> >  >  +    /*This SHOULD execute the applet!*/
> >>> >  >  +    @Test
> >>> >  >  +    public void AppletInFirefoxTest() throws Exception {
> >>> >  >  +        ServerAccess.ProcessResult pr = server.executeBrowser("/AppletReadsInvalidJar.html");
> >>> >  >  +
> >>> >  >  +        String s0 = "Program Executed Correctly.";
> >>> >  >  +        Assert.assertTrue("AppletTakesLastParam stdout should contain " + s0 + " but did not.", pr.stdout.contains(s0));
> >>> >  >  +    }
> >>> >  >  +}
> >> >
> >> >  Tahnx for test again!
> >> >
> >> >  J.
> >> >
> >
> >
> > ignore-invalid-jar-files-reproducers-updated.patch
> >
> >
> > diff --git a/tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/AppletReadsInvalidJar.html b/tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/AppletReadsInvalidJar.html
> > new file mode 100644
> > --- /dev/null
> > +++ b/tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/AppletReadsInvalidJar.html
> > @@ -0,0 +1,42 @@
> > +<!--
> > +
> > +This file is part of IcedTea.
> > +
> > +IcedTea is free software; you can redistribute it and/or modify
> > +it under the terms of the GNU General Public License as published by
> > +the Free Software Foundation; either version 2, or (at your option)
> > +any later version.
> > +
> > +IcedTea is distributed in the hope that it will be useful, but
> > +WITHOUT ANY WARRANTY; without even the implied warranty of
> > +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > +General Public License for more details.
> > +
> > +You should have received a copy of the GNU General Public License
> > +along with IcedTea; see the file COPYING.  If not, write to the
> > +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> > +02110-1301 USA.
> > +
> > +Linking this library statically or dynamically with other modules is
> > +making a combined work based on this library.  Thus, the terms and
> > +conditions of the GNU General Public License cover the whole
> > +combination.
> > +
> > +As a special exception, the copyright holders of this library give you
> > +permission to link this library with independent modules to produce an
> > +executable, regardless of the license terms of these independent
> > +modules, and to copy and distribute the resulting executable under
> > +terms of your choice, provided that you also meet, for each linked
> > +independent module, the terms and conditions of the license of that
> > +module.  An independent module is a module which is not derived from
> > +or based on this library.  If you modify this library, you may extend
> > +this exception to your version of the library, but you are not
> > +obligated to do so.  If you do not wish to do so, delete this
> > +exception statement from your version.
> > +
> > + -->
> > +<html><head></head><body bgcolor="blue">
> > +<p><applet code="Valid.class" archive="NOT_A_VALID_JAR.jar,AppletReadsInvalidJar.jar">
> > +</applet></p>
> > +</body>
> > +</html>
> > diff --git a/tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/AppletReadsInvalidJar.jnlp b/tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/AppletReadsInvalidJar.jnlp
> > new file mode 100644
> > --- /dev/null
> > +++ b/tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/AppletReadsInvalidJar.jnlp
> > @@ -0,0 +1,62 @@
> > +<!--
> > +
> > +This file is part of IcedTea.
> > +
> > +IcedTea is free software; you can redistribute it and/or modify
> > +it under the terms of the GNU General Public License as published by
> > +the Free Software Foundation; either version 2, or (at your option)
> > +any later version.
> > +
> > +IcedTea is distributed in the hope that it will be useful, but
> > +WITHOUT ANY WARRANTY; without even the implied warranty of
> > +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > +General Public License for more details.
> > +
> > +You should have received a copy of the GNU General Public License
> > +along with IcedTea; see the file COPYING.  If not, write to the
> > +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> > +02110-1301 USA.
> > +
> > +Linking this library statically or dynamically with other modules is
> > +making a combined work based on this library.  Thus, the terms and
> > +conditions of the GNU General Public License cover the whole
> > +combination.
> > +
> > +As a special exception, the copyright holders of this library give you
> > +permission to link this library with independent modules to produce an
> > +executable, regardless of the license terms of these independent
> > +modules, and to copy and distribute the resulting executable under
> > +terms of your choice, provided that you also meet, for each linked
> > +independent module, the terms and conditions of the license of that
> > +module.  An independent module is a module which is not derived from
> > +or based on this library.  If you modify this library, you may extend
> > +this exception to your version of the library, but you are not
> > +obligated to do so.  If you do not wish to do so, delete this
> > +exception statement from your version.
> > +
> > + -->
> > +<?xml version="1.0" encoding="utf-8"?>
> > +<jnlp spec="1.0" href="AppletReadsInvalidJar.jnlp" codebase=".">
> > +<information>
> > +<title>AppletReadsInvalidJar</title>
> > +<vendor>IcedTea</vendor>
> > +<homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
> > +<description>AppletTest</description>
> > +<offline/>
> > +</information>
> > +<resources>
> > +<j2se version="1.4+"/>
> > +<jar href="NOT_A_VALID_JAR.jar"/>
> > +<jar href="AppletReadsInvalidJar.jar"/>
> > +</resources>
> > +<applet-desc
> > +      documentBase="."
> > +      name="AppletReadsInvalidJar"
> > +      main-class="ValidHeadless"
> > +      width="100"
> > +      height="100">
> > +</applet-desc>
> > +</jnlp>
> > +
> > +
> > +</applet-desc>
> > diff --git a/tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/NOT_A_VALID_JAR.jar b/tests/jnlp_tests/simple/AppletReadsInvalidJar/resources/NOT_A_VALID_JAR.jar
> > new file mode 100644
> > diff --git a/tests/jnlp_tests/simple/AppletReadsInvalidJar/srcs/Valid.java b/tests/jnlp_tests/simple/AppletReadsInvalidJar/srcs/Valid.java
> > new file mode 100644
> > --- /dev/null
> > +++ b/tests/jnlp_tests/simple/AppletReadsInvalidJar/srcs/Valid.java
> > @@ -0,0 +1,59 @@
> > +import java.applet.Applet;
> > +
> > +/*
> > +Copyright (C) 2011 Red Hat, Inc.
> > +
> > +This file is part of IcedTea.
> > +
> > +IcedTea is free software; you can redistribute it and/or
> > +modify it under the terms of the GNU General Public License as published by
> > +the Free Software Foundation, version 2.
> > +
> > +IcedTea is distributed in the hope that it will be useful,
> > +but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > +General Public License for more details.
> > +
> > +You should have received a copy of the GNU General Public License
> > +along with IcedTea; see the file COPYING.  If not, write to
> > +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> > +02110-1301 USA.
> > +
> > +Linking this library statically or dynamically with other modules is
> > +making a combined work based on this library.  Thus, the terms and
> > +conditions of the GNU General Public License cover the whole
> > +combination.
> > +
> > +As a special exception, the copyright holders of this library give you
> > +permission to link this library with independent modules to produce an
> > +executable, regardless of the license terms of these independent
> > +modules, and to copy and distribute the resulting executable under
> > +terms of your choice, provided that you also meet, for each linked
> > +independent module, the terms and conditions of the license of that
> > +module.  An independent module is a module which is not derived from
> > +or based on this library.  If you modify this library, you may extend
> > +this exception to your version of the library, but you are not
> > +obligated to do so.  If you do not wish to do so, delete this
> > +exception statement from your version.
> > + */
> > +public class Valid extends Applet {
> > +
> > +    private class Killer extends Thread {
> > +        @Override
> > +        public void run() {
> > +            try {
> > +                int n = 2000;
> > +                Thread.sleep(n);
> > +                System.exit(0);
> > +            } catch (Exception ex) {
> > +            }
> > +        }
> > +    }
> > +
> > +    private Killer killer = new Killer();
> > +
> > +    @Override
> > +    public void init() {
> > +        System.out.println("Program Executed Correctly.");
> > +    }
> > +}
> > diff --git a/tests/jnlp_tests/simple/AppletReadsInvalidJar/srcs/ValidHeadless.java b/tests/jnlp_tests/simple/AppletReadsInvalidJar/srcs/ValidHeadless.java
> > new file mode 100644
> > --- /dev/null
> > +++ b/tests/jnlp_tests/simple/AppletReadsInvalidJar/srcs/ValidHeadless.java
> > @@ -0,0 +1,56 @@
> > +/*
> > +Copyright (C) 2011 Red Hat, Inc.
> > +
> > +This file is part of IcedTea.
> > +
> > +IcedTea is free software; you can redistribute it and/or
> > +modify it under the terms of the GNU General Public License as published by
> > +the Free Software Foundation, version 2.
> > +
> > +IcedTea is distributed in the hope that it will be useful,
> > +but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > +General Public License for more details.
> > +
> > +You should have received a copy of the GNU General Public License
> > +along with IcedTea; see the file COPYING.  If not, write to
> > +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> > +02110-1301 USA.
> > +
> > +Linking this library statically or dynamically with other modules is
> > +making a combined work based on this library.  Thus, the terms and
> > +conditions of the GNU General Public License cover the whole
> > +combination.
> > +
> > +As a special exception, the copyright holders of this library give you
> > +permission to link this library with independent modules to produce an
> > +executable, regardless of the license terms of these independent
> > +modules, and to copy and distribute the resulting executable under
> > +terms of your choice, provided that you also meet, for each linked
> > +independent module, the terms and conditions of the license of that
> > +module.  An independent module is a module which is not derived from
> > +or based on this library.  If you modify this library, you may extend
> > +this exception to your version of the library, but you are not
> > +obligated to do so.  If you do not wish to do so, delete this
> > +exception statement from your version.
> > + */
> > +public class ValidHeadless {
> > +
> > +    private class Killer extends Thread {
> > +        @Override
> > +        public void run() {
> > +            try {
> > +                int n = 2000;
> > +                Thread.sleep(n);
> > +                System.exit(0);
> > +            } catch (Exception ex) {
> > +            }
> > +        }
> > +    }
> > +
> > +    private Killer killer = new Killer();
> > +
> > +    public static void main(String[] args){
> > +        System.out.println("Program Executed Correctly.");
> > +    }
> > +}
> > diff --git a/tests/jnlp_tests/simple/AppletReadsInvalidJar/testcases/AppletReadsInvalidJarTests.java b/tests/jnlp_tests/simple/AppletReadsInvalidJar/testcases/AppletReadsInvalidJarTests.java
> > new file mode 100644
> > --- /dev/null
> > +++ b/tests/jnlp_tests/simple/AppletReadsInvalidJar/testcases/AppletReadsInvalidJarTests.java
> > @@ -0,0 +1,76 @@
> > +/* AppletReadsInvalidJarTests.java
> > +Copyright (C) 2011 Red Hat, Inc.
> > +
> > +This file is part of IcedTea.
> > +
> > +IcedTea is free software; you can redistribute it and/or
> > +modify it under the terms of the GNU General Public License as published by
> > +the Free Software Foundation, version 2.
> > +
> > +IcedTea is distributed in the hope that it will be useful,
> > +but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > +General Public License for more details.
> > +
> > +You should have received a copy of the GNU General Public License
> > +along with IcedTea; see the file COPYING.  If not, write to
> > +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> > +02110-1301 USA.
> > +
> > +Linking this library statically or dynamically with other modules is
> > +making a combined work based on this library.  Thus, the terms and
> > +conditions of the GNU General Public License cover the whole
> > +combination.
> > +
> > +As a special exception, the copyright holders of this library give you
> > +permission to link this library with independent modules to produce an
> > +executable, regardless of the license terms of these independent
> > +modules, and to copy and distribute the resulting executable under
> > +terms of your choice, provided that you also meet, for each linked
> > +independent module, the terms and conditions of the license of that
> > +module.  An independent module is a module which is not derived from
> > +or based on this library.  If you modify this library, you may extend
> > +this exception to your version of the library, but you are not
> > +obligated to do so.  If you do not wish to do so, delete this
> > +exception statement from your version.
> > + */
> > +
> > +import net.sourceforge.jnlp.ServerAccess;
> > +import net.sourceforge.jnlp.ServerAccess.ProcessResult;
> > +import net.sourceforge.jnlp.LaunchException;
> > +import org.junit.Assert;
> > +
> > +import org.junit.Test;
> > +
> > +public class AppletReadsInvalidJarTests {
> > +
> > +    private static ServerAccess server = new ServerAccess();
> > +
> > +    /*This SHOULD NOT execute the applet!*/
> > +    @Test
> > +    public void AppletJNLPTest() throws Exception {
> > +        long previousTimeout = ServerAccess.PROCESS_TIMEOUT;
> > +        boolean exceptionOccurred = false;
> > +        try {
> > +            /*This test should be short, so set to 2 seconds*/
> > +            ServerAccess.PROCESS_TIMEOUT = 2 * 1000;
> > +            ServerAccess.ProcessResult pr = server.executeJavawsHeadless("/AppletReadsInvalidJar.jnlp");
> > +
> > +            String s0 = "Program Executed Correctly.";
> > +            Assert.assertFalse("AppletReadsInvalidJar stdout should NOT contain " + s0 + ", but did (applet should not have ran!).", pr.stdout.contains(s0));
> > +            String s1 = "ZipException";
> > +            Assert.assertTrue("AppletReadsInvalidJar stderr should contain 'ZipException', but did not.", pr.stderr.contains(s1));
> > +        } finally {
> > +            ServerAccess.PROCESS_TIMEOUT = previousTimeout;
> > +        }
> > +    }
> > +
> > +    /*This SHOULD execute the applet!*/
> > +    @Test
> > +    public void AppletInFirefoxTest() throws Exception {
> > +        ServerAccess.ProcessResult pr = server.executeBrowser("/AppletReadsInvalidJar.html");
> > +
> > +        String s0 = "Program Executed Correctly.";
> > +        Assert.assertTrue("AppletReadsInvalidJar stdout should contain " + s0 + " but did not.", pr.stdout.contains(s0));
> > +    }
> > +}
> >
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: ignore-invalid-jars.patch
Type: text/x-patch
Size: 10918 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/distro-pkg-dev/attachments/20120615/5d98733a/ignore-invalid-jars.patch 


More information about the distro-pkg-dev mailing list