[Webkit-unassigned] [Bug 206938] New: Safari hangs indefinitely on connections that accept the TCP connection but do not then negotiation the TLS connection
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Wed Jan 29 09:01:28 PST 2020
https://bugs.webkit.org/show_bug.cgi?id=206938
Bug ID: 206938
Summary: Safari hangs indefinitely on connections that accept
the TCP connection but do not then negotiation the TLS
connection
Product: WebKit
Version: Safari 13
Hardware: Macintosh
OS: macOS 10.15
Status: NEW
Severity: Normal
Priority: P2
Component: Page Loading
Assignee: webkit-unassigned at lists.webkit.org
Reporter: andrew.howden at zalando.de
CC: beidson at apple.com
Hola Crew,
I hope this bug report finds you well!
At the time of writing it appears that Safari either does not or has an extremely long timeout with the TLS component of the connection. I believe it would be a nicer experience for users if the connection was closed earlier (perhaps 3 minutes or so), rather than continuing.
The steps to reproduce are as follows:
1. Alias a path to a common website (such as example.com) to 127.0.0.1 via /etc/hosts
2. Compile and run the golang script below
3. Attempt to connect to https://${WEBSITE}
4. Wait (so far I as can assess indefinitely)
It is difficult to assess the real world impact of this bug. It was discovered while investigating an intermittent (rarely occurring) similarly presenting issue accessing the following resource:
- https://img01.ztat.net/article/N1/24/1D/10/3E/11/N1241D103-E11@17.jpg?imwidth=300
We could not replicate it on the above resource consistently, however were able to replicate it by stubbing out the connection and sinkholing the TLS portion of the connection.
Is it possible to introduce a timeout for this (or perhaps the the entire) connection? In this way the error will be presented to users transparently.
Kind regards,
Andrew.
—
package main
import (
"log"
"net"
)
func handle(c net.Conn) {
b := make([]byte, 1024)
log.Printf("connection accepted from %s ", c.RemoteAddr())
for {
_, err := c.Read(b)
if err != nil {
log.Printf("error: %s", err.Error())
// We leave the connection open to mess with safari. All we want to do is just do one way traffic,
// and pretend to be alive.
return
}
log.Printf("%s", b)
}
}
func main() {
ln, err := net.Listen("tcp", ":443")
if err != nil {
panic(err)
}
for {
c, err := ln.Accept()
if err != nil {
panic(err)
}
go handle(c)
}
}
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20200129/0c9d6f46/attachment-0001.htm>
More information about the webkit-unassigned
mailing list