Skip to content
Snippets Groups Projects
  • Gregory Szorc's avatar
    dc4d2cd3
    hgweb: send proper HTTP response after uncaught exception · dc4d2cd3
    Gregory Szorc authored
    This patch fixes a bug where hgweb would send an incomplete HTTP
    response.
    
    If an uncaught exception is raised when hgweb is processing a request,
    hgweb attempts to send a generic error response and log that exception.
    
    The server defaults to chunked transfer coding. If an uncaught exception
    occurred, it was sending the error response string / chunk properly.
    However, RFC 7230 Section 4.1 mandates a 0 size last chunk be sent to
    indicate end of the entity body. hgweb was failing to send this last
    chunk. As a result, properly written HTTP clients would assume more data
    was coming and they would likely time out waiting for another chunk to
    arrive.
    
    Mercurial's own test harness was paving over the improper HTTP behavior
    by not attempting to read the response body if the status code was 500.
    This incorrect workaround was added in ba6577a19656 and has been removed
    with this patch.
    dc4d2cd3
    History
    hgweb: send proper HTTP response after uncaught exception
    Gregory Szorc authored
    This patch fixes a bug where hgweb would send an incomplete HTTP
    response.
    
    If an uncaught exception is raised when hgweb is processing a request,
    hgweb attempts to send a generic error response and log that exception.
    
    The server defaults to chunked transfer coding. If an uncaught exception
    occurred, it was sending the error response string / chunk properly.
    However, RFC 7230 Section 4.1 mandates a 0 size last chunk be sent to
    indicate end of the entity body. hgweb was failing to send this last
    chunk. As a result, properly written HTTP clients would assume more data
    was coming and they would likely time out waiting for another chunk to
    arrive.
    
    Mercurial's own test harness was paving over the improper HTTP behavior
    by not attempting to read the response body if the status code was 500.
    This incorrect workaround was added in ba6577a19656 and has been removed
    with this patch.