Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 4653036
Votes 2
Synopsis JarDiffHandler() should use javax.servlet.context.tempdir to store the jardiff
Category javawebstart:other
Reported Against 1.0.1
Release Fixed 1.4.2(mantis)
State 10-Fix Delivered, bug
Priority: 4-Low
Related Bugs
Submit Date 14-MAR-2002
Description




FULL PRODUCT VERSION :
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)

FULL OPERATING SYSTEM VERSION :
 customer  Windows 2000 [Versione 5.00.2195]

EXTRA RELEVANT SYSTEM CONFIGURATION :
CPU  customer  Pentium  customer  733 Mhz, 512 Mhz Ram

A DESCRIPTION OF THE PROBLEM :
JarDiffHandler.generateJarDiff() does not read the context
attribute javax.servlet.context.tempdir, as it should, to
locate the temporary directory where to store the jardiff file.
It only relies on the system property java.io.tmpdir.
If it is not properly set, you will get a
java.io.IOException.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. set java.io.tmpdir to an unexistent directory
2. set the context attribute javax.servlet.context.tempdir
to a valid directory path
3. ask JnlpDownloadServlet to retrieve a jardiff file


EXPECTED VERSUS ACTUAL BEHAVIOR :
I expect the jardiff file as response from the
JnlpDownloadServlet, stored in the
javax.servlet.context.tempdir directory.

The Web Container raises a java.io.IOException.



ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.io.IOException: Impossibile trovare il percorso specificato
	at java.io.WinNTFileSystem.createFileExclusively(Native Method)
	at java.io.File.checkAndCreate(File.java:1294)
	at java.io.File.createTempFile(File.java:1382)
	at java.io.File.createTempFile(File.java:1419)
	at com.sysdata.lutest.test.doGet(test.java:38)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org. customer .catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:247)
	at org. customer .catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:193)
	at org. customer .catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:243)
	at org. customer .catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:566)
	at org. customer .catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
	at org. customer .catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org. customer .catalina.core.StandardContextValve.invoke
(StandardContextValve.java:190)
	at org. customer .catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:566)
	at org. customer .catalina.valves.CertificatesValve.invoke
(CertificatesValve.java:246)
	at org. customer .catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:564)
	at org. customer .catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
	at org. customer .catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org. customer .catalina.core.StandardContext.invoke
(StandardContext.java:2343)
	at org. customer .catalina.core.StandardHostValve.invoke
(StandardHostValve.java:180)
	at org. customer .catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:566)
	at org. customer .catalina.valves.ErrorDispatcherValve.invoke
(ErrorDispatcherValve.java:170)
	at org. customer .catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:564)
	at org. customer .catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:170)
	at org. customer .catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:564)
	at org. customer .catalina.valves.AccessLogValve.invoke
(AccessLogValve.java:468)
	at org. customer .catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:564)
	at org. customer .catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
	at org. customer .catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org. customer .catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:174)
	at org. customer .catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java:566)
	at org. customer .catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
	at org. customer .catalina.core.ContainerBase.invoke(ContainerBase.java:943)
	at org. customer .catalina.connector.http.HttpProcessor.process
(HttpProcessor.java:1012)
	at org. customer .catalina.connector.http.HttpProcessor.run
(HttpProcessor.java:1107)
	at java.lang.Thread.run(Thread.java:536)


This bug can be reproduced always.

---------- BEGIN SOURCE ----------
I decompiled the JarDiffHandler class (I couldnt retrieve the sources).
The variable "file" (temporary directory path) is set but not used.


private File generateJarDiff(ResourceCatalog resourcecatalog, DownloadRequest
downloadrequest, JnlpResource jnlpresource)
    {
        DownloadRequest downloadrequest1 =
downloadrequest.getFromDownloadRequest();
        try
        {
            JnlpResource jnlpresource1 = resourcecatalog.lookupResource
(downloadrequest1);
            String s = _servletContext.getRealPath(jnlpresource.getPath());
            String s1 = _servletContext.getRealPath(jnlpresource1.getPath());
            if(s == null || s1 == null)
                return null;

            File file = (File)_servletContext.getAttribute
("javax.servlet.context.tempdir");

            File file1 = File.createTempFile("jnlp", ".jardiff");
            _log.addDebug("Generating Jardiff between " + s1 + " and " + s + "
Store in " + file1);

            FileOutputStream fileoutputstream = new FileOutputStream(file1);

            (new JarDiff()).createPatch(s1, s, fileoutputstream);

            fileoutputstream.close();

            if (file1.length() >= (new File(s)).length())
            {
                _log.addDebug("JarDiff discarded - since it is bigger");
                return null;
            } else
            {
                _log.addDebug("JarDiff generation succeeded");
                return file1;
            }
        }
        catch(IOException ioexception)
        {
            _log.addDebug("Failed to genereate jardiff", ioexception);
            return null;
        }
        catch(ErrorResponseException errorresponseexception)
        {
            _log.addDebug("Failed to genereate jardiff",
errorresponseexception);
        }
        return null;
    }

---------- END SOURCE ----------

CUSTOMER WORKAROUND :
Set the java.io.tmpdir to a valid directory path.
(Review ID: 143787) 
======================================================================
Work Around
N/A
Evaluation
investigate implementing this in mantis timeframe
  xxxxx@xxxxx   2002-05-10
Comments
  
  Include a link with my name & email   


PLEASE NOTE: JDK6 is formerly known as Project Mustang