Commit 9ebd95b
committed
phar: cap decompression output against declared uncompressed_filesize
phar_open_entry_fp() decompressed entries by streaming
compressed_filesize bytes through a filter into a tmpfile, then
checked output size after the full copy. A crafted phar whose
compressed data expanded beyond uncompressed_filesize could write
large amounts to disk before the check ran.
Replace the single php_stream_copy_to_stream_ex() call with an 8 KiB
chunked loop that flushes the decompression filter and checks running
output size after each chunk. Abort when output exceeds
uncompressed_filesize.1 parent f7eb5ef commit 9ebd95b
2 files changed
+45
-4
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
926 | 926 | | |
927 | 927 | | |
928 | 928 | | |
929 | | - | |
930 | | - | |
931 | | - | |
932 | | - | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
933 | 948 | | |
934 | 949 | | |
935 | 950 | | |
| |||
0 commit comments