Ticket Change Details
Overview

Artifact ID: 3effdf848f2b92a46a8bd59c191b5e561b6656a80c8ab0fa147db5ee1a6cbea6
Ticket: 6a63c165d876c0879e2c05f4826bd931e78d6c13
tcltls-2.0.b1 infinite loop in Tls_WaitForConnect
User & Date: anonymous on 2025-04-06 22:30:05
Changes

  1. icomment:
    This code will reproduce the problem:
    <pre>
    #!/usr/bin/env tclsh
    package require Tcl 8.6-
    package require tls
    package require http
     
    set url "https://pinacnews.com"
    set port 443
    set protocol "http/1.1"
     
    # Register https protocol handler with http package
    http::register https 443 [list ::tls::socket -autoservername 1 -require 1 -alpn [list [string tolower $protocol]]]
     
    # Get webpage
    set token [::http::geturl $url -blocksize 16384]
    if {[http::status $token] ne "ok"} {
        puts [format "Error: \"%s\"" [http::status $token]]
        ::http::cleanup $token
        exit
    }
     
    # Get web page
    set data [http::data $token]
     
    # Cleanup
    ::http::cleanup $token
     
    # Save data to file
    set ch [open "tcl_tk_home.html" wb]
    puts $ch $data
    close $ch
    </pre>
    
    Although the configure script has the <i>--enable-ssl-fastpath</i> option the source never includes confdefs.h. By hacking <pre>#define TCLTLS_SSL_USE_FASTPATH 1</pre> into generic/tlsBIO.c I was able to get past the bug.
    
    The site https://pinacnews.com only responds with RST to the SYN sent. 
    By running
    <pre>
    % set sock [tls::socket -autoservername 1 -require 1 -alpn [list [string tolower {http/1.1}]] pinacnews.com 443]
    couldn't open socket: connection refused
    </pre> 
    I could see that it wasn't a problem with the socket but for whatever reason the socket was being passed to tlsIO.c even though it had already failed.
    
    The error handling in tlsIO.c thinks the error should have a retry and ends up looping forever getting the same error each time.
    
  2. login: "anonymous"
  3. mimetype: "text/html"
  4. private_contact changed to: "319409ab6a0bc31d2a0da67b49b83b0b33d54058"
  5. severity changed to: "Critical"
  6. status changed to: "Open"
  7. title changed to: "tcltls-2.0.b1 infinite loop in Tls_WaitForConnect"
  8. type changed to: "Code Defect"