Closed Bug 1358882 Opened 7 years ago Closed 7 years ago

es6 module crash browser on repeated/circular module import

Categories

(Core :: DOM: Core & HTML, defect)

55 Branch
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla57
Tracking Status
firefox57 --- fixed

People

(Reporter: t, Assigned: jonco)

References

Details

Attachments

(2 files)

User Agent: Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0
Build ID: 20170422100218

Steps to reproduce:

Nightly 55.0a1 (2017-04-22) (64-bit) with about:config setting `dom.moduleScripts.enabled=true`

Attempted to import javascript modules with circular imports.  Firefox is able to handle a few of these repeated/circular imports, but eventually crashes when too many are added.

See attached example application `firefox-module-crash.zip`


Actual results:

Crash Report: https://bugzilla.mozilla.org/show_bug.cgi?id=944926
Console Output:
```
[Parent 18178] WARNING: pipe error (120): Connection reset by peer: file /home/worker/workspace/build/src/ipc/chromium/src/chrome/common/ipc_channel_posix.cc, line 353

###!!! [Parent][MessageChannel] Error: (msgtype=0x2C0080,name=PBrowser::Msg_Destroy) Channel error: cannot send/recv
```


Expected results:

Circular and repeated imports should be expected.  This should work.
May be related to https://bugzilla.mozilla.org/show_bug.cgi?id=1346482
Component: Untriaged → JavaScript Engine
Product: Firefox → Core
The test case crashes because test2.js exports "test3" instead of "test2". The expected result is to report a SyntaxError.

The test case can be reduced to:

index.js:
---
import "./test1.js";
---

index1.js
---
import { test2 } from "./test2.js";
import "./test3.js";
---

index2.js
---
import "./test3.js";
---

index3.js
---
import "./test1.js";
---
It's not reproducible with the sm-shell, so more likely a browser bug (maybe even related to bug 1340304).
Component: JavaScript Engine → DOM: Core & HTML
Flags: needinfo?(jcoppeard)
We hit this assertion in http://searchfox.org/mozilla-central/rev/876c7dd30586f9c6f9c99ef7444f2d73c7acfe7c/dom/base/nsScriptLoader.cpp#1085 with the test case:

Assertion failure: !aRequest->mModuleScript->InstantiationFailed(), at /home/andre/hg/mozilla-inbound/dom/base/nsScriptLoader.cpp:1085


Stack:
#0  0x00007fffe89f79dc in nsScriptLoader::StartFetchingModuleDependencies (this=0x7fffc127e2a0, aRequest=<optimised out>)
    at /home/andre/hg/mozilla-inbound/dom/base/nsScriptLoader.cpp:1085
#1  0x00007fffe8a02ee3 in mozilla::MozPromise<bool, nsresult, false>::InvokeCallbackMethod<nsModuleLoadRequest, void (nsModuleLoadRequest::*)(), nsresult const&> (
    aValue=<optimised out>, aMethod=<optimised out>, aThisVal=<optimised out>)
    at /home/andre/hg/mozilla-inbound/obj-x86_64-pc-linux-gnu/dist/include/mozilla/MozPromise.h:501
#2  mozilla::MozPromise<bool, nsresult, false>::MethodThenValue<nsModuleLoadRequest, void (nsModuleLoadRequest::*)(), void (nsModuleLoadRequest::*)()>::DoResolveOrRejectInternal (this=0x7fffc7981d30, aValue=...) at /home/andre/hg/mozilla-inbound/obj-x86_64-pc-linux-gnu/dist/include/mozilla/MozPromise.h:534
#3  0x00007fffe8a0363c in mozilla::MozPromise<bool, nsresult, false>::ThenValueBase::DoResolveOrReject (this=0x7fffc7981d30, aValue=...)
    at /home/andre/hg/mozilla-inbound/obj-x86_64-pc-linux-gnu/dist/include/mozilla/MozPromise.h:438
#4  0x00007fffe8a037a2 in mozilla::MozPromise<bool, nsresult, false>::ThenValueBase::ResolveOrRejectRunnable::Run (this=0x7fffc1310700)
    at /home/andre/hg/mozilla-inbound/obj-x86_64-pc-linux-gnu/dist/include/mozilla/MozPromise.h:344
#5  0x00007fffe7b91922 in mozilla::AutoTaskDispatcher::TaskGroupRunnable::Run (this=0x7fffc08c4ca0)
    at /home/andre/hg/mozilla-inbound/obj-x86_64-pc-linux-gnu/dist/include/mozilla/TaskDispatcher.h:205
#6  0x00007fffe7b8ba3c in mozilla::EventTargetWrapper::Runner::Run (this=0x7fffc15220b0) at /home/andre/hg/mozilla-inbound/xpcom/threads/AbstractThread.cpp:166
#7  0x00007fffe7b98cb2 in nsThread::ProcessNextEvent (this=0x7fffe4b99e80, aMayWait=<optimised out>, aResult=0x7fffffffc1c7)
    at /home/andre/hg/mozilla-inbound/xpcom/threads/nsThread.cpp:1270
#8  0x00007fffe7b9aaf8 in NS_ProcessNextEvent (aThread=aThread@entry=0x7fffe4b99e80, aMayWait=aMayWait@entry=false)
    at /home/andre/hg/mozilla-inbound/xpcom/threads/nsThreadUtils.cpp:393
...
Assignee: nobody → jcoppeard
Flags: needinfo?(jcoppeard)
(In reply to André Bargull from comment #3)
Thanks for the reduced testcase.
The assertion in nsScriptLoader::StartFetchingModuleDependencies is wrong as this testcase demonstrates and we can reach this point after failing to instantiate a module.  We need to check this here and fail the load if necessary.

The sequence of events when loading modules is pretty hard to follow so I added some more logging to help debug issues like this.  This ends up making up most of the patch.
Attachment #8863802 - Flags: review?(bugs)
Attachment #8863802 - Flags: review?(bugs) → review+
Pushed by jcoppeard@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/195d6bc4e2ca
Check for failed instantiation when starting to fetch module dependencies r=smaug
Backed out for asserting and failing in wpt circular-module-import-with-syntax-error.html:

https://hg.mozilla.org/integration/mozilla-inbound/rev/50e6bdbcc7308bbc15f13cbec4ec18cf1a061b7e

Follow-up push with failure: https://treeherder.mozilla.org/#/jobs?repo=mozilla-inbound&revision=d40e448b1a3331d7cc1f825ffb4808deb5c6211f&filter-resultStatus=testfailed&filter-resultStatus=busted&filter-resultStatus=exception&filter-resultStatus=retry&filter-resultStatus=usercancel&filter-resultStatus=runnable
Failure log: https://treeherder.mozilla.org/logviewer.html#?job_id=96004481&repo=mozilla-inbound

[task 2017-05-02T18:21:17.730562Z] 18:21:17     INFO - TEST-START | /_mozilla/html/semantics/scripting-1/the-script-element/circular-module-import-with-syntax-error.html
[task 2017-05-02T18:21:17.764340Z] 18:21:17     INFO - Setting pref dom.moduleScripts.enabled (true)
[task 2017-05-02T18:21:17.840547Z] 18:21:17     INFO - PID 12155 | ++DOCSHELL 0x7fab7cd3e800 == 2 [pid = 12215] [id = {e54026db-7844-4ffe-8349-5f92f4d77e96}]
[task 2017-05-02T18:21:17.841001Z] 18:21:17     INFO - PID 12155 | ++DOMWINDOW == 5 (0x7fab7cd3f000) [pid = 12215] [serial = 5] [outer = (nil)]
[task 2017-05-02T18:21:17.897234Z] 18:21:17     INFO - PID 12155 | ++DOMWINDOW == 6 (0x7fab7cd44800) [pid = 12215] [serial = 6] [outer = 0x7fab7cd3f000]
[task 2017-05-02T18:21:17.912865Z] 18:21:17     INFO - PID 12155 | 1493749277907	Marionette	DEBUG	loaded listener.js
[task 2017-05-02T18:21:17.969299Z] 18:21:17     INFO - PID 12155 | ++DOMWINDOW == 7 (0x7fab7cd4d000) [pid = 12215] [serial = 7] [outer = 0x7fab7cd3f000]
[task 2017-05-02T18:21:18.005119Z] 18:21:18     INFO - PID 12155 | ++DOCSHELL 0x7f24002a4800 == 6 [pid = 12155] [id = {3fdcf425-b8a1-4ca5-99fd-82249782a86c}]
[task 2017-05-02T18:21:18.005729Z] 18:21:18     INFO - PID 12155 | ++DOMWINDOW == 12 (0x7f24002a5000) [pid = 12155] [serial = 12] [outer = (nil)]
[task 2017-05-02T18:21:18.053115Z] 18:21:18     INFO - PID 12155 | ++DOMWINDOW == 13 (0x7f24002b7800) [pid = 12155] [serial = 13] [outer = 0x7f24002a5000]
[task 2017-05-02T18:21:18.290535Z] 18:21:18     INFO - PID 12155 | ++DOMWINDOW == 14 (0x7f23ffd41800) [pid = 12155] [serial = 14] [outer = 0x7f24002a5000]
[task 2017-05-02T18:21:18.588890Z] 18:21:18     INFO - PID 12155 | Assertion failure: found, at /home/worker/workspace/build/src/dom/base/nsScriptLoader.cpp:862
[task 2017-05-02T18:21:18.764090Z] 18:21:18     INFO - PID 12155 | #01: HostResolveImportedModule(JSContext*, unsigned int, JS::Value*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.769818Z] 18:21:18     INFO - PID 12155 | #02: js::CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.775144Z] 18:21:18     INFO - PID 12155 | #03: js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.780563Z] 18:21:18     INFO - PID 12155 | #04: js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.785847Z] 18:21:18     INFO - PID 12155 | #05: JS_CallFunction(JSContext*, JS::Handle<JSObject*>, JS::Handle<JSFunction*>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.791190Z] 18:21:18     INFO - PID 12155 | #06: intrinsic_HostResolveImportedModule(JSContext*, unsigned int, JS::Value*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.792596Z] 18:21:18     INFO - PID 12155 | #07: js::CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.793103Z] 18:21:18     INFO - PID 12155 | #08: js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.796847Z] 18:21:18     INFO - PID 12155 | #09: Interpret(JSContext*, js::RunState&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.802043Z] 18:21:18     INFO - PID 12155 | #10: js::RunScript(JSContext*, js::RunState&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.807459Z] 18:21:18     INFO - PID 12155 | #11: js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.808479Z] 18:21:18     INFO - PID 12155 | #12: Interpret(JSContext*, js::RunState&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.809378Z] 18:21:18     INFO - PID 12155 | #13: js::RunScript(JSContext*, js::RunState&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.810285Z] 18:21:18     INFO - PID 12155 | #14: js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.811246Z] 18:21:18     INFO - PID 12155 | #15: Interpret(JSContext*, js::RunState&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.812095Z] 18:21:18     INFO - PID 12155 | #16: js::RunScript(JSContext*, js::RunState&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.812960Z] 18:21:18     INFO - PID 12155 | #17: js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.813868Z] 18:21:18     INFO - PID 12155 | #18: js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.816737Z] 18:21:18     INFO - PID 12155 | #19: InvokeSelfHostedMethod(JSContext*, JS::Handle<js::ModuleObject*>, JS::Handle<js::PropertyName*>) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.822157Z] 18:21:18     INFO - PID 12155 | #20: js::ModuleObject::DeclarationInstantiation(JSContext*, JS::Handle<js::ModuleObject*>) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.827666Z] 18:21:18     INFO - PID 12155 | #21: JS::ModuleDeclarationInstantiation(JSContext*, JS::Handle<JSObject*>) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.833355Z] 18:21:18     INFO - PID 12155 | #22: nsJSUtils::ModuleDeclarationInstantiation(JSContext*, JS::Handle<JSObject*>) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.838766Z] 18:21:18     INFO - PID 12155 | #23: nsScriptLoader::InstantiateModuleTree(nsModuleLoadRequest*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.844941Z] 18:21:18     INFO - PID 12155 | #24: nsModuleLoadRequest::DependenciesLoaded() (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.851038Z] 18:21:18     INFO - PID 12155 | #25: nsScriptLoader::StartFetchingModuleDependencies(nsModuleLoadRequest*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.856960Z] 18:21:18     INFO - PID 12155 | #26: nsScriptLoader::ProcessFetchedModuleSource(nsModuleLoadRequest*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.862755Z] 18:21:18     INFO - PID 12155 | #27: nsScriptLoader::PrepareLoadedRequest(nsScriptLoadRequest*, nsIIncrementalStreamLoader*, nsresult) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.868692Z] 18:21:18     INFO - PID 12155 | #28: nsScriptLoader::OnStreamComplete(nsIIncrementalStreamLoader*, nsScriptLoadRequest*, nsresult, nsresult, mozilla::dom::SRICheckDataVerifier*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.874485Z] 18:21:18     INFO - PID 12155 | #29: nsScriptLoadHandler::OnStreamComplete(nsIIncrementalStreamLoader*, nsISupports*, nsresult, unsigned int, unsigned char const*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.879618Z] 18:21:18     INFO - PID 12155 | #30: nsIncrementalStreamLoader::OnStopRequest(nsIRequest*, nsISupports*, nsresult) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.884767Z] 18:21:18     INFO - PID 12155 | #31: nsCORSListenerProxy::OnStopRequest(nsIRequest*, nsISupports*, nsresult) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.889976Z] 18:21:18     INFO - PID 12155 | #32: mozilla::net::HttpChannelChild::DoOnStopRequest(nsIRequest*, nsresult, nsISupports*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.895170Z] 18:21:18     INFO - PID 12155 | #33: mozilla::net::HttpChannelChild::OnStopRequest(nsresult const&, mozilla::net::ResourceTimingStruct const&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.900411Z] 18:21:18     INFO - PID 12155 | #34: mozilla::net::ChannelEventQueue::RunOrEnqueue(mozilla::net::ChannelEvent*, bool) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.905493Z] 18:21:18     INFO - PID 12155 | #35: mozilla::net::HttpChannelChild::RecvOnStopRequest(nsresult const&, mozilla::net::ResourceTimingStruct const&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.910697Z] 18:21:18     INFO - PID 12155 | #36: mozilla::net::PHttpChannelChild::OnMessageReceived(IPC::Message const&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.915826Z] 18:21:18     INFO - PID 12155 | #37: mozilla::ipc::MessageChannel::DispatchAsyncMessage(IPC::Message const&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.921032Z] 18:21:18     INFO - PID 12155 | #38: mozilla::ipc::MessageChannel::DispatchMessage(IPC::Message&&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.926225Z] 18:21:18     INFO - PID 12155 | #39: mozilla::ipc::MessageChannel::RunMessage(mozilla::ipc::MessageChannel::MessageTask&) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.931465Z] 18:21:18     INFO - PID 12155 | #40: mozilla::ipc::MessageChannel::MessageTask::Run() (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.936341Z] 18:21:18     INFO - PID 12155 | #41: mozilla::SchedulerGroup::Runnable::Run() (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.941278Z] 18:21:18     INFO - PID 12155 | #42: nsThread::ProcessNextEvent(bool, bool*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.946105Z] 18:21:18     INFO - PID 12155 | #43: NS_ProcessNextEvent(nsIThread*, bool) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.951211Z] 18:21:18     INFO - PID 12155 | #44: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.956310Z] 18:21:18     INFO - PID 12155 | #45: MessageLoop::RunInternal() (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.961381Z] 18:21:18     INFO - PID 12155 | #46: MessageLoop::Run() (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.967193Z] 18:21:18     INFO - PID 12155 | #47: nsBaseAppShell::Run() (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.972481Z] 18:21:18     INFO - PID 12155 | #48: XRE_RunAppShell() (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.977684Z] 18:21:18     INFO - PID 12155 | #49: mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.978552Z] 18:21:18     INFO - PID 12155 | #50: MessageLoop::RunInternal() (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.979307Z] 18:21:18     INFO - PID 12155 | #51: MessageLoop::Run() (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:18.984535Z] 18:21:18     INFO - PID 12155 | #52: XRE_InitChildProcess(int, char**, XREChildData const*) (/home/worker/workspace/build/application/firefox/libxul.so)
[task 2017-05-02T18:21:19.032734Z] 18:21:19     INFO - PID 12155 | #53: content_process_main(mozilla::Bootstrap*, int, char**) (/home/worker/workspace/build/application/firefox/firefox)
[task 2017-05-02T18:21:19.032825Z] 18:21:19     INFO - PID 12155 | #54: main (/home/worker/workspace/build/application/firefox/firefox)
[task 2017-05-02T18:21:20.672801Z] 18:21:20     INFO - PID 12155 | #55: __libc_start_main (/build/glibc-9tT8Do/glibc-2.23/csu/../csu/libc-start.c:325)
[task 2017-05-02T18:21:20.674589Z] 18:21:20     INFO - PID 12155 | #56: _start (/home/worker/workspace/build/application/firefox/firefox)
Flags: needinfo?(jcoppeard)
Depends on: 1361988
This is a separate issue which is sometimes triggered by the testcase.
Flags: needinfo?(jcoppeard)
Blocks: modules-0
> Attempted to import javascript modules with circular imports.  Firefox is
> able to handle a few of these repeated/circular imports, but eventually
> crashes when too many are added.

Same conclusion as I have.
I was only able to run the application in Firefox when I had 1 circular link. From the moment more modules were added and more direct or indirect circular links, I was never able to run. But with SystemJS everything works perfectly.
(In reply to t from comment #1)
> May be related to https://bugzilla.mozilla.org/show_bug.cgi?id=1346482

I also think it's the same, complementary, or related.
There seem to be a few bugs on file that are caused by this issue.  I'm going to land the patch without the testcase, and land that when the other crashes are fixed (hopefully by bug 1388728).
Keywords: leave-open
Pushed by jcoppeard@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/4e6acfa334ce
Check for failed instantiation when starting to fetch module dependencies r=smaug
Pushed by jcoppeard@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/18517b516a24
Add a circular module import test r=smaug
Keywords: leave-open
https://hg.mozilla.org/mozilla-central/rev/18517b516a24
Status: UNCONFIRMED → RESOLVED
Closed: 7 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla57
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: