[php-src] Issue #24441: quoted_printable_encode() produces lines longer than 76 characters for bytes 0xF5 to 0xFF

From: Date: Mon, 19 Oct 2026 15:32:55 +0000
Subject: [php-src] Issue #24441: quoted_printable_encode() produces lines longer than 76 characters for bytes 0xF5 to 0xFF
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-253031@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/24441 Author: auraseb ### Description quoted_printable_encode() is documented to follow RFC 2045 section 6.7, which limits encoded lines to 76 characters. Input bytes in the range 0xF5 to 0xFF are encoded as =XX but never trigger a soft line break, so a run of them ends up on a single line of any length. The following code: ```php <?php $encoded = quoted_printable_encode(str_repeat("\xFF", 30)); var_dump(array_map('strlen', explode("\r\n", $encoded))); ``` Resulted in this output: ``` array(1) { [0]=> int(90) } ``` But I expected this output instead: ``` array(2) { [0]=> int(76) [1]=> int(15) } ``` The same happens with any binary data that contains such bytes, for example a random string of a few hundred bytes regularly produces 78 or 79 character lines. The convert.quoted-printable-encode stream filter is not affected. Root cause: in php_quot_print_encode() (ext/standard/quot_print.c) the soft break condition has one branch for bytes up to 0x7F and three branches for UTF-8 lead and continuation bytes (0x80 to 0xDF, 0xE0 to 0xEF, 0xF0 to 0xF4). Bytes 0xF5 to 0xFF match none of them, so the line position keeps growing without a break being inserted. ### PHP Version ``` PHP 8.7.0-dev (master at b7256eee), also present in all supported branches ``` ### Operating System Any

« previous php.bugs (#253031) next »