Potential signed-to-unsigned conversion in TIFF dimension parsing
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 62/100
Rechercherichtung
Beginne in ext/standard/image.c bei php_handle_tiff(), insbesondere bei der Behandlung von TAG_FMT_SSHORT und den im Issue identifizierten Zuweisungen von IMAGEWIDTH/IMAGEHEIGHT. Prüfe, wie TIFF-Dimensionsfeldtypen validiert werden, und führe die relevanten Image-/TIFF-Tests aus. Das Ziel ist erreicht, wenn negative vorzeichenbehaftete Werte nicht zu Dimensionen werden können, während gültige vorzeichenlose SHORT- oder LONG-Dimensionen weiterhin funktionieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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
- Vorherrschende Sprache
- C
- Sterne
- 40.4k
- Forks
- 8.2k
- Ø Merge
- 2 T. 59 Min.
- Gemergte PRs (30 T.)
- 155
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus php/php-src
-
Feature Status: Needs Triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 73/100
php/php-src#24183 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Sockets from synchronous stream_socket_client() are left in non-blocking mode on WindowsEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. OffenBug Status: Needs Triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
Maintainer antworten meist innerhalb von 1 Tag
-
sapi_lsapi_ub_write does not return bytes written in lsapi modeEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. OffenBug Status: Needs Triage
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
Maintainer antworten meist innerhalb von 1 Tag
-
Bug Status: Needs Triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Use of PIDFile= in php-fpm.serviceEvtl. vergeben @CodedByManish hat das vor 30 Tagen übernommen. OffenBug SAPI: fpm Status: Needs Triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
php/php-src#21740 · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
docs: AGENTS.md has no rule against running deploy scripts into the owner's game installEvtl. vergeben @thesprockee hat das heute übernommen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 85/100
EchoTools/nevr-runtime#524 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
-
type: feature
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 77/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 83/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
FujiNetWIFI/fujinet-firmware#1932 ·
Maintainer antworten meist innerhalb von 1 Tag