Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Potential signed-to-unsigned conversion in TIFF dimension parsing

Ouverte Adaptée aux débutants
#24,196 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

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
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
c, php
Domaine
backend

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

Bug Status: Needs Triage
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

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de php/php-src

Toutes les issues de php/php-src

Issues similaires

Plus d'issues C

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.