fix(transport): avoid filesize() on URLs when downloading packages - #75
Open
Ibochkarev wants to merge 4 commits into
Open
fix(transport): avoid filesize() on URLs when downloading packages#75Ibochkarev wants to merge 4 commits into
Ibochkarev wants to merge 4 commits into
Conversation
Use stream metadata Content-Length for URLs instead of filesize() which fails on remote streams. For local paths, keep using filesize(). Refs modxcms#16068
Added comprehensive tests for the modTransportPackage class, including checks for local file sizes, URL handling with Content-Length headers, and scenarios with empty wrapper data. Introduced a custom stream wrapper for testing purposes to simulate various conditions.
…getReadByteLimit logic
Avoid filesize()/single fread on remote package URLs, prefer the final Content-Length after redirects, and keep _bytes working on PHP 8.1 (modxcms#16068).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что сделано
Загрузка пакета через
allow_url_fopenбольше не вызываетfilesize()на remote URL (это вызывало PHP-предупреждения). Он читает уже открытый поток черезstream_get_contents(), поэтому короткийfread()/ неверный Content-Length не обрезает zip.Хелперы остаются для тестов:
getStreamOrFileSize()(последний числовой Content-Length после редиректов) иgetReadByteLimit()._bytes()используетini_parse_quantity()на PHP 8.2+ и безопасный фолбэк на 8.1.Зачем нужно
Загрузка экстра логировала
filesize(): stat failed for https://…и связанные предупреждения (modxcms#16068).Как проверить
allow_url_fopenвкл, без прокси: установите пакет от провайдера; без filesize-предупреждений; zip устанавливается.phpunit --filter modTransportPackageTestСвязанные
Refs modxcms#16068
Оригинал: modxcms#16851