php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #51723 Content-length header is limited to 32bit integer
Submitted: 2010-05-03 00:58 UTC Modified: 2010-06-19 18:42 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: anatoli at adt dot ee Assigned: pajoye (profile)
Status: Closed Package: Apache2 related
PHP Version: 5.2.13 OS: vista 32
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem:
23 + 26 = ?
Subscribe to this entry?

 
 [2010-05-03 00:58 UTC] anatoli at adt dot ee
Description:
------------
Content-length header is limited to 32bit integer on wista 32 systems under apache 2 sapi.
header("Content-Length: 2967901695");
Expected on client - Content-Length: 2967901695
            Actual - Content-Length: 2147483647

Test script:
---------------
<?php
header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
header('Accept-Ranges: bytes');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=test.txt');
header("Content-Transfer-Encoding: binary");
header("Content-Length: 2967901695");
header('Connection: close');
//we open file with size exactly 2967901695 bytes
$fp = fopen("somefile.name", 'rb');
fpassthru($fp);
?>

Expected result:
----------------
Content-Length: 2967901695

Actual result:
--------------
Content-Length: 2147483647

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-05-03 01:41 UTC] pajoye@php.net
-Status: Open +Status: Bogus
 [2010-05-03 01:41 UTC] pajoye@php.net
The header is correctly sent without modification (you can verify that using cgi in the console). However PHP does not support large file support and only 2^31 bytes are read and sent.

There is already a feature request for LFS > mark this one as duplicated (bogus).
 [2010-05-03 01:50 UTC] anatoli at adt dot ee
The problem is not in the filesize. Headers was checked with the latest wireshark. Under the cgi i receive correct header. Under sapi not. Do i must provide here code that allow downloads for files till 8Gb with multiple threads and resume support, witch is working under unix cgi, and not under win32 sapi? I redused test case to exactly minimum amount of code needed to reproduce error.
 [2010-05-03 02:33 UTC] pajoye@php.net
-Status: Bogus +Status: Assigned -Assigned To: +Assigned To: pajoye
 [2010-05-03 02:33 UTC] pajoye@php.net
"Do i must provide here code that allow downloads for files till 8Gb with multiple threads and resume support, witch is working under unix cgi, and not under win32 sapi?"

No, thanks.

Does it work with apache on unix as well? If yes, is it a 64bit or 32bit machine?

The problem could be still the 32bit limitation as the apache2 SAPI replaces the headers with the correct length using strtol, which converts a string to a long. A long is always 32bit on Windows.

I will check that code, needs some tweak on Windows (no luck I think on unix 32bit).
 [2010-05-03 10:31 UTC] anatoli at adt dot ee
Ok, now i got the point. Yes i really missed that long in windows is always 32bit by default and as i remember in 64bit windows it is also limited to 32bit. There must be used long long type, but i am not sure that this is possible.
But anyway thanks.
 [2010-05-03 10:40 UTC] anatoli at adt dot ee
Was not able to find 32bit unix/linux system.
Tested on 64bit both cgi and apache sapi - working, content-type header data is correct.
 [2010-05-03 10:46 UTC] pajoye@php.net
Windows 64bit is not always limited to 32bit if the correct type are used (__int64 & co).

About unix, that's the same reason. Long is 64bit on 64bit linux while being 32bit on 32bit linux. As I will fix this problem on windows, it won't ever work on 32bit linux, but that's not really an issue as it never worked on these old systems.
 [2010-05-03 19:48 UTC] pajoye@php.net
-Status: Assigned +Status: Closed
 [2010-05-03 19:48 UTC] pajoye@php.net
This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 [2010-05-03 21:52 UTC] pajoye@php.net
Automatic comment from SVN on behalf of pajoye
Revision: http://svn.php.net/viewvc/?view=revision&amp;revision=298930
Log: - revert fix for #51723 in 5.2, vc6 does not support strtoi64, use builtin functioon in 5.3 (trunk is vc9+ only)
 [2010-06-19 18:42 UTC] pajoye@php.net
See #50940 too.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Mar 28 10:01:26 2024 UTC