quoted_printable_encode() produces lines longer than 76 characters for bytes 0xF5 to 0xFF
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 76/100
Piste de recherche
Commencez par php_quot_print_encode() dans ext/standard/quot_print.c et comparez le traitement des retours à la ligne souples pour les octets de 0xF5 à 0xFF avec les branches existantes. Examinez les tests quoted-printable pertinents et ajoutez une couverture pour une séquence de ces octets. Le travail est terminé lorsque les lignes encodées respectent la limite de 76 caractères de la RFC 2045 ; l’issue indique que le filtre de flux n’est pas affecté.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
$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
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 22 h
- PR mergées (30 j)
- 166
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de php/php-src
-
Bug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
HTTP wrapper leaks dechunk filter when header parsing fails after Transfer-Encoding: chunkedOuverteBug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Bug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 71/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Bug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de php/php-src
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
valkey-io/valkey#4979 · 1 réaction ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
colbymchenry/codegraph#2770 ·
Les mainteneurs répondent en général sous 1 jour
-
area/ysql kind/enhancement priority/medium status/awaiting-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 73/100
yugabyte/yugabyte-db#35578 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
Les mainteneurs répondent en général sous 1 jour
-
test_announce_and_connect_via_dns binds a fixed port that other tests' nodes can be handedPeut-être pris @ksedgwic l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
ElementsProject/lightning#9642 ·
Les mainteneurs répondent en général sous 2 jours