phacility/phabricator · error · Exception
Unable to determine image width and height with getimagesize
Error message
Unable to determine image width and height with getimagesize().
What it means
getimagesize() succeeded (returned an array) but reported a width or height of zero or less. This is a malformed-image edge case: the header parsed far enough to produce dimensions, but the dimensions themselves are degenerate, so the transform pipeline refuses to continue. It is a data-integrity failure of the uploaded file, distinct from the getimagesize()-returned-false case.
Source
Thrown at src/applications/files/transform/PhabricatorFileImageTransform.php:328
$tmp_path = (string)$tmp;
$trap = new PhutilErrorTrap();
$info = @getimagesize($tmp_path);
$errors = $trap->getErrorsAsString();
$trap->destroy();
unset($tmp);
if ($info === false) {
throw new Exception(
pht(
'Unable to get image information with getimagesize(): %s',
$errors));
}
list($width, $height) = $info;
if (($width <= 0) || ($height <= 0)) {
throw new Exception(
pht(
'Unable to determine image width and height with getimagesize().'));
}
$max_pixels = (4096 * 4096);
$img_pixels = ($width * $height);
if ($img_pixels > $max_pixels) {
throw new Exception(
pht(
'This image (with dimensions %spx x %spx) is too large to '.
'transform. The image has %s pixels, but transforms are limited '.
'to images with %s or fewer pixels.',
new PhutilNumber($width),
new PhutilNumber($height),
new PhutilNumber($img_pixels),
new PhutilNumber($max_pixels)));
}View on GitHub (pinned to 5720a38cfe)
Solutions
- Re-encode or replace the file with one from a known-good tool (open and re-save it in an image editor).
- Add server-side validation that rejects uploads where getimagesize() yields non-positive dimensions.
- Catch the exception at transform time and skip transforms for such files.
Example fix
// validation before accepting/transforming an upload
$info = @getimagesize($tmp_path);
if ($info === false || $info[0] <= 0 || $info[1] <= 0) {
throw new Exception('Uploaded file is not a valid image.');
} Defensive patterns
Strategy: validation
Validate before calling
$info = @getimagesize($tmp_path);
if ($info === false || $info[0] <= 0 || $info[1] <= 0) {
return null; // degenerate dimensions; treat as invalid image
} Type guard
function hasPositiveImageDimensions($info): bool {
return is_array($info) && (int)$info[0] > 0 && (int)$info[1] > 0;
} Prevention
- Validate both width and height are >= 1 whenever you accept image uploads.
- Treat zero-dimension images as malformed data; do not retry or re-upload them unchanged.
- Re-encode suspicious files with a known-good tool before storing.
When it happens
Trigger: Transforming a crafted or damaged image whose header encodes width/height <= 0 — e.g. hand-edited or bit-flipped files, images produced by broken encoders, or fuzzed payloads that pass format sniffing but carry nonsense dimensions.
Common situations: Malformed files that evade naive client-side validation; encoder bugs in whatever generated the upload; almost never produced by mainstream image software, so treat the file as bad data.
Related errors
- Can not create an image with nonpositive dimensions.
- Unable to determine image dimensions with imagesx()/imagesy(
- Unable to get image information with getimagesize(): %s
- This image (with dimensions %spx x %spx) is too large to tra
- Failed to imagecopyresampled() image: %s
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/ec73824789c32d96.
Report an issue: GitHub.