We detect such prematurely ended request when there's a Content-Length
greater than the body we got. A strict comparison would easily fail
when there was a content encoding layer, but hopefully we won't hit
a compressed request _larger_ than the original content.
See http://thread.gmane.org/gmane.org.wikimedia.mediawiki/39622
for breakage caused by truncated HTTP replies.
Change-Id: I71418424730d46a781bde5cbfda8038457ec79c5
$this->parseHeader();
$this->setStatus();
+ if ( isset( $this->respHeaders['content-length'] ) ) {
+ if ( strlen( $this->content ) < $this->respHeaders['content-length'] ) {
+ $this->status->fatal( 'http-truncated-body' );
+ }
+ }
+
return $this->status;
}
'http-curl-error' => 'Error fetching URL: $1',
'http-host-unreachable' => 'Could not reach URL.',
'http-bad-status' => 'There was a problem during the HTTP request: $1 $2',
+'http-truncated-body' => 'The request body was only partially received.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Could not reach URL',
If \'scheme\' is difficult to translate, then you could use \'prefix\' instead.',
'http-bad-status' => '$1 is an HTTP error code (e.g. 404), $2 is the HTTP error message (e.g. File Not Found)',
+'http-truncated-body' => 'Seems the connection closed prematurely. The HTTP response contained a Content-length greated than the received body.',
'license' => 'This appears in the upload form for the license drop-down. The header in the file description page is now at {{msg-mw|License-header}}.',
'nolicense' => '{{Identical|None selected}}',
'http-curl-error',
'http-host-unreachable',
'http-bad-status',
+ 'http-truncated-body',
),
'upload-curl-errors' => array(