Potential signed-to-unsigned conversion in TIFF dimension parsing
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 62/100
Piste de recherche
Commencez dans ext/standard/image.c, au niveau de php_handle_tiff(), en particulier le traitement de TAG_FMT_SSHORT et les affectations de IMAGEWIDTH/IMAGEHEIGHT identifiées dans l’issue. Vérifiez comment les types de champs de dimension TIFF sont validés et exécutez les tests pertinents pour les images/TIFF. Le travail est terminé lorsque les valeurs négatives signées ne peuvent pas devenir des dimensions, tandis que les dimensions valides de type SHORT ou LONG non signé continuent de fonctionner.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Description
Hi, It seemed to me that a negative signed value could potentially be converted to a large unsigned value here.
A potential signed-to-unsigned conversion issue exists in php_handle_tiff() when processing TIFF image dimensions.
The entry_value variable is declared as size_t, while the TAG_FMT_SSHORT case assigns the return value of php_ifd_get16s() to it:
case TAG_FMT_SSHORT:
entry_value = php_ifd_get16s(dir_entry+8, motorola_intel);
break;
php_ifd_get16s() returns a signed 16-bit value. Therefore, a negative value from the TIFF input can be converted to a large unsigned size_t value.
If such an entry is subsequently identified as TAG_IMAGEWIDTH or TAG_IMAGEHEIGHT, the converted value is assigned to width or height:
case TAG_IMAGEWIDTH:
case TAG_COMP_IMAGEWIDTH:
width = entry_value;
break;
case TAG_IMAGEHEIGHT:
case TAG_COMP_IMAGEHEIGHT:
height = entry_value;
break;
For example, a signed value of -1 can be converted to the maximum value of size_t instead of remaining negative.
According to the TIFF 6.0 specification, ImageWidth and ImageLength use the SHORT or LONG types, where SHORT is an unsigned 16-bit integer. The reader is expected to validate the field type.
Impact
A malformed TIFF containing a negative SSHORT value for an image dimension can therefore cause the parser to produce an unexpectedly large width or height.
Proposed solution
Validate the signed value before assigning it to the unsigned entry_value variable and reject negative values.
PHP Version
PHP 8.3.31 (CLI)
Operating System
Ubuntu 24.04
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 24 min
- PR mergées (30 j)
- 157
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
-
Difficulté 2/5 Une demi-journée Accessibilité débutants 62/100
Les mainteneurs répondent en général sous 1 jour
-
Feature Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 73/100
php/php-src#24183 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Sockets from synchronous stream_socket_client() are left in non-blocking mode on WindowsPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. OuverteBug Status: Needs Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
Les mainteneurs répondent en général sous 1 jour
-
sapi_lsapi_ub_write does not return bytes written in lsapi modePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. OuverteBug Status: Needs Triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/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 78/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de php/php-src
Issues similaires
-
UB: (int) cast of a user double outside int range in dispatch / vm_index_is_int / flat_index_atOuvertearea:runtime-vm
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
InauguralSystems/EigenScript#1748 ·
Les mainteneurs répondent en général sous 1 jour
-
chore: update release scheduleOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Les mainteneurs répondent en général sous 4 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 1 jour
-
foomatic-rip: dstrtrim_right() underflows mid-loop on an all-whitespace stringPeut-être pris @ManasBagul23 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
OpenPrinting/cups-filters#759 ·
Les mainteneurs répondent en général sous 11 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
EchoTools/nevr-runtime#547 ·
Les mainteneurs répondent en général sous 1 jour