JDK-7130014 : REGRESSION:Firefox crashes if an applet calls URL.openStream during applet stop method
  • Type: Bug
  • Component: deploy
  • Sub-Component: plugin
  • Affected Version: 7
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • OS: windows_7
  • CPU: x86
  • Submitted: 2012-01-13
  • Updated: 2013-09-12
  • Resolved: 2012-05-21
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 7 JDK 8
7u4Fixed 8 b25Fixed
Description
FULL PRODUCT VERSION :
java version "1.7.0_04-ea"
Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b06)
Java HotSpot(TM) Client VM (build 23.0-b09, mixed mode, sharing)

ADDITIONAL OS VERSION INFORMATION :
Windows 7 (64-bit), Windows XP (32-bit), SLES (32-bit).
Firefox 3.6.25, Firefox 9.0.1.

EXTRA RELEVANT SYSTEM CONFIGURATION :
Crash does not occur with IE8/9 or Chrome.

A DESCRIPTION OF THE PROBLEM :
A Java applet that attempts to call URL.openStream from the applet stop method may cause Firefox to crash. This started happening with Java 7 update 4 and did not occur with Java 7 update 2. Also does not occur with any Java 6 versions. Strangely, it seems to depend on the host used for opening the URL stream, though it's not clear why some URLs fail while most others work. Among the URLs that result in the crash are www.nytimes.com, www.cnn.com and www.gocomics.com. A coworker has reproduced this problem on various machines using these same URLs.

The reason for calling openStream is because our client applet wishes to fire off a "logout" message to our webapp to log the user out when the applet is navigated away. We don't really care about the response, and it's really just a best-effort attempt to notify the server. We use URL.openStream to open the connection to the server from applet.stop.

REGRESSION.  Last worked in version 7

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Create a Java applet that calls URL.openStream from the applet stop method, where the URL is one of the URLs noted above. Load an HTML page containing the applet, then browse away from the applet page to another website (www.oracle.com or www.google.com work fine). In Firefox 9.0.1 with Java 7u4_b06, the VM and browser will crash.

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
VM and browser should not crash on browse-away from the applet page.
ACTUAL -
VM and Firefox crash on browse-away from the applet page.

ERROR MESSAGES/STACK TRACES THAT OCCUR :
Not finding any hs_err_pidxxxx.log files, but here's a Java console retrieved from Sun/Deployment/logs file after the crash:

Log started: Fri, 13 Jan 2012 17:56:32 -0500
basic: Added progress listener: sun.plugin.util.ProgressMonitorAdapter@4737a3
network: Cache entry not found [url: file:/C:/Test/, version: null]
network: Cache entry not found [url: file:/C:/Test/, version: null]
basic: Applet loaded.
basic: Applet resized and added to parent container
basic: PERF: AppletExecutionRunnable - applet.init() BEGIN ; jvmLaunch dt 129611 us, pluginInit dt 422807 us, TotalTime: 552418 us
applet init
request url: http://www.gocomics.com
basic: Applet initialized
basic: Starting applet
basic: completed perf rollup
applet start
basic: Applet made visible
basic: Applet started
basic: Told clients applet is started
basic: Starting applet teardown
applet stop
Opening stream to URL...
network: Cache entry not found [url: http://www.gocomics.com/, version: null]
network: Connecting http://www.gocomics.com/ with proxy=DIRECT
network: Cache entry not found [url: http://www.gocomics.com/crossdomain.xml, version: null]
network: Connecting http://www.gocomics.com/crossdomain.xml with proxy=DIRECT
network: Connecting http://www.gocomics.com:80/ with proxy=DIRECT
plugin2manager.parentwindowDispose
network: Server http://www.gocomics.com/crossdomain.xml requesting to set-cookie with "remember_token=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"
java.lang.InterruptedException
	at java.lang.Object.wait(Native Method)
	at sun.plugin2.message.Queue.waitForMessage(Unknown Source)
	at sun.plugin2.message.Pipe$2.run(Unknown Source)
	at com.sun.deploy.util.Waiter$1.wait(Unknown Source)
	at com.sun.deploy.util.Waiter.runAndWait(Unknown Source)
	at sun.plugin2.message.Pipe.receive(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.doCookieOp(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.setCookie(Unknown Source)
	at sun.plugin2.main.client.PluginCookieSelector.setCookieInBrowser(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.setCookieInfo(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.put(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source)
	at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.<init>(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.URL.openStream(Unknown Source)
	at BrowseAwayApplet.openURL(BrowseAwayApplet.java:40)
	at BrowseAwayApplet.stop(BrowseAwayApplet.java:32)
	at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.stop(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
java.lang.InterruptedException
	at java.lang.Object.wait(Native Method)
	at sun.plugin2.message.Queue.waitForMessage(Unknown Source)
	at sun.plugin2.message.Pipe$2.run(Unknown Source)
	at com.sun.deploy.util.Waiter$1.wait(Unknown Source)
	at com.sun.deploy.util.Waiter.runAndWait(Unknown Source)
	at sun.plugin2.message.Pipe.receive(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.doCookieOp(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.setCookie(Unknown Source)
	at sun.plugin2.main.client.PluginCookieSelector.setCookieInBrowser(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.setCookieInfo(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.put(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source)
	at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.<init>(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.URL.openStream(Unknown Source)
	at BrowseAwayApplet.openURL(BrowseAwayApplet.java:40)
	at BrowseAwayApplet.stop(BrowseAwayApplet.java:32)
	at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.stop(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Cookie service is unavailable - ignore "Set-Cookie"
network: Server http://www.gocomics.com/crossdomain.xml requesting to set-cookie with "_GoComics3_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRiIlOTlhZDkxNjE1MDYxMWU0YzdiM2Y5OWEzZWFiM2MwOWZJIgpmbGFzaAY7AEZJQzolQWN0aW9uRGlzcGF0Y2g6OkZsYXNoOjpGbGFzaEhhc2h7BjoKZXJyb3JJIiZTb3JyeS4gY3Jvc3Nkb21haW4gd2FzIG5vdCBGb3VuZC4GOwBGBjoKQHVzZWRvOghTZXQGOgpAaGFzaHsA--229d6a44a4da3e3ff418138385abf04e5d90b3f5; path=/; HttpOnly"
java.lang.InterruptedException
	at java.lang.Object.wait(Native Method)
	at sun.plugin2.message.Queue.waitForMessage(Unknown Source)
	at sun.plugin2.message.Pipe$2.run(Unknown Source)
	at com.sun.deploy.util.Waiter$1.wait(Unknown Source)
	at com.sun.deploy.util.Waiter.runAndWait(Unknown Source)
	at sun.plugin2.message.Pipe.receive(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.doCookieOp(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.setCookie(Unknown Source)
	at sun.plugin2.main.client.PluginCookieSelector.setCookieInBrowser(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.setCookieInfo(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.put(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source)
	at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.<init>(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.URL.openStream(Unknown Source)
	at BrowseAwayApplet.openURL(BrowseAwayApplet.java:40)
	at BrowseAwayApplet.stop(BrowseAwayApplet.java:32)
	at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.stop(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
java.lang.InterruptedException
	at java.lang.Object.wait(Native Method)
	at sun.plugin2.message.Queue.waitForMessage(Unknown Source)
	at sun.plugin2.message.Pipe$2.run(Unknown Source)
	at com.sun.deploy.util.Waiter$1.wait(Unknown Source)
	at com.sun.deploy.util.Waiter.runAndWait(Unknown Source)
	at sun.plugin2.message.Pipe.receive(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.doCookieOp(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.setCookie(Unknown Source)
	at sun.plugin2.main.client.PluginCookieSelector.setCookieInBrowser(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.setCookieInfo(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.put(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source)
	at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.<init>(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.URL.openStream(Unknown Source)
	at BrowseAwayApplet.openURL(BrowseAwayApplet.java:40)
	at BrowseAwayApplet.stop(BrowseAwayApplet.java:32)
	at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.stop(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Cookie service is unavailable - ignore "Set-Cookie"
network: Cache entry not found [url: http://www.gocomics.com/, version: null]
network: Connecting http://www.gocomics.com/ with proxy=DIRECT
network: Connecting http://www.gocomics.com:80/ with proxy=DIRECT
java.io.IOException: Error 232 writing to named pipe, numWritten 0, WriteFile ts: 1985723991, now ts: 1985724006, dT 15
	at sun.plugin2.ipc.windows.WindowsNamedPipe.write(Unknown Source)
	at sun.plugin2.message.transport.NamedPipeTransport$SerializerImpl.flush(Unknown Source)
	at sun.plugin2.message.transport.NamedPipeTransport.signalDataWritten(Unknown Source)
	at sun.plugin2.message.transport.SerializingTransport.write(Unknown Source)
	at sun.plugin2.message.Pipe.send(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.doCookieOp(Unknown Source)
	at sun.plugin2.main.client.MessagePassingExecutionContext.getCookie(Unknown Source)
	at sun.plugin2.main.client.PluginCookieSelector.getCookieFromBrowser(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.getCookieInfo(Unknown Source)
	at com.sun.deploy.net.cookie.DeployCookieSelector.get(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.setCookieHeader(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at com.sun.deploy.net.CrossDomainXML.check(Unknown Source)
	at sun.plugin2.applet.SecurityManagerHelper.checkConnectHelper(Unknown Source)
	at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.<init>(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.URL.openStream(Unknown Source)
	at BrowseAwayApplet.openURL(BrowseAwayApplet.java:40)
	at BrowseAwayApplet.stop(BrowseAwayApplet.java:32)
	at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.stop(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
network: Cookie service is not available - use cache to determine "Cookie"
network: Connecting http://www.gocomics.com/ with cookie ""
network: Server http://www.gocomics.com/ requesting to set-cookie with "remember_token=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"
java.io.IOException: Error 232 writing to named pipe, numWritten 0, WriteFile ts: 1985828950, now ts: 1985828972, dT 22
	at sun.plugin2.ipc.windows.WindowsNamedPipe.write(Unknown Source)
	at sun.plugin2.message.transport.NamedPipeTransport$SerializerImpl.flush(Unknown Source)
	at sun.plugin2.message.transport.NamedPipeTransport$Seria


( This report has more than 16,000 characters and has been truncated. )