Crash in [@ mozilla::net::Http3Session::ProcessInput]
Categories
(Core :: Networking: HTTP, defect, P2)
Tracking
()
| Tracking | Status | |
|---|---|---|
| firefox-esr78 | --- | unaffected |
| firefox-esr91 | --- | wontfix |
| firefox87 | --- | unaffected |
| firefox88 | --- | wontfix |
| firefox89 | --- | wontfix |
| firefox93 | --- | wontfix |
| firefox94 | --- | wontfix |
| firefox95 | --- | fixed |
People
(Reporter: aryx, Assigned: valentin)
References
(Blocks 1 open bug, Regression)
Details
(Keywords: crash, regression)
Crash Data
Attachments
(1 file)
4 crashes on 2+ devices, all on Windows 10
Crash report: https://crash-stats.mozilla.org/report/index/24b0dd56-4154-4319-a431-d090f0210331
MOZ_CRASH Reason: MOZ_DIAGNOSTIC_ASSERT(false) (NS_SUCCEEDED(rv))
Top 10 frames of crashing thread:
0 xul.dll mozilla::net::Http3Session::ProcessInput netwerk/protocol/http/Http3Session.cpp:325
1 xul.dll mozilla::net::Http3Session::RecvData netwerk/protocol/http/Http3Session.cpp:1149
2 xul.dll mozilla::net::HttpConnectionUDP::RecvData netwerk/protocol/http/HttpConnectionUDP.cpp:544
3 xul.dll mozilla::net::HttpConnectionUDP::OnPacketReceived netwerk/protocol/http/HttpConnectionUDP.cpp:646
4 xul.dll mozilla::net::nsSocketTransportService::Run netwerk/base/nsSocketTransportService2.cpp:1160
5 xul.dll nsThread::ProcessNextEvent xpcom/threads/nsThread.cpp:1145
6 xul.dll mozilla::ipc::MessagePumpForNonMainThreads::Run ipc/glue/MessagePump.cpp:302
7 xul.dll MessageLoop::RunHandler ipc/chromium/src/base/message_loop.cc:328
8 xul.dll MessageLoop::Run ipc/chromium/src/base/message_loop.cc:310
9 xul.dll static nsThread::ThreadFunc xpcom/threads/nsThread.cpp:391
Comment 1•4 years ago
|
||
This is failing because rust parser of an IP address in form of a string fails.
The protocol will handle just fine some of the packets being dropet for his reason.
I will leave this as a diagnostic assert, and I will lot to change c++-rust glue code a bit to mitigate this problem if possible.
Updated•4 years ago
|
Updated•4 years ago
|
| Assignee | ||
Updated•4 years ago
|
| Assignee | ||
Comment 2•4 years ago
|
||
It seems the result of AddrToString when the assertion happens here is ?:443 - which obviously doesn't parse as an IP addr.
Now I'm trying to figure out where the ? is coming from 🙂
| Assignee | ||
Comment 3•4 years ago
|
||
From what I can tell the ? is coming from getnameinfo via inet_ntop_internal.
From what I can tell, because we pass NI_NUMERICHOST, this should never happen.
Maybe a bug in the getnameinfo implementation on windows?
In any case, the steps here seem to be:
- Pass NetAddr/SockAddr to and from rust, instead of parsing the IP on every call.
- Use a native serialization of NetAddr to avoid said bug (if it exists) in a follow-up bug.
| Assignee | ||
Comment 4•4 years ago
|
||
It seems that the serialization generated by inet_ntop_internal via
getnameinfo is sometimes wrong, returning ? instead of serializing the
IP we pass in.
It's also inefficient to keep passing the serialization to and from rust
code - instead it's much easier to just pass a pointer to the NetAddr
union and build a proper SocketAddr instance on the rust side from
from the bytes instead of parsing the serialization
| Assignee | ||
Updated•4 years ago
|
Comment 8•4 years ago
|
||
| bugherder | ||
Updated•4 years ago
|
Updated•4 years ago
|
Description
•