return;
}
- if (x_size <= 0 || y_size <= 0 || x_size >= INT_MAX || y_size >= INT_MAX) {
- php_error_docref(NULL, E_WARNING, "Invalid image dimensions");
- RETURN_FALSE;
+ if (x_size <= 0 || x_size >= INT_MAX) {
+ zend_throw_error(NULL, "Invalid width (x_size)");
+ return;
+ }
+
+ if (y_size <= 0 || y_size >= INT_MAX) {
+ zend_throw_error(NULL, "Invalid height (y_size)");
+ return;
}
im = gdImageCreateTrueColor(x_size, y_size);
return;
}
- if (x_size <= 0 || y_size <= 0 || x_size >= INT_MAX || y_size >= INT_MAX) {
- php_error_docref(NULL, E_WARNING, "Invalid image dimensions");
- RETURN_FALSE;
+ if (x_size <= 0 || x_size >= INT_MAX) {
+ zend_throw_error(NULL, "Invalid width (x_size)");
+ return;
+ }
+
+ if (y_size <= 0 || y_size >= INT_MAX) {
+ zend_throw_error(NULL, "Invalid height (y_size)");
+ return;
}
im = gdImageCreate(x_size, y_size);
$filename = "{$pathinfo['dirname']}/{$pathinfo['filename']}.out.png";
imagepng($image, $filename);
}
+
+/**
+ * Replicates write errors to the output log, but by catching
+ * and formatting exceptions instead so they have a consistent
+ * output
+ */
+
+function trycatch_dump(...$tests) {
+ foreach ($tests as $test) {
+ try {
+ var_dump($test());
+ }
+ catch (\Error $e) {
+ echo '!! [' . get_class($e) . '] ' . $e->getMessage() . "\n";
+ }
+ }
+}
+
--- /dev/null
+--TEST--
+Testing imagecreate(): error on out of bound parameters
+--SKIPIF--
+<?php
+ if (!extension_loaded("gd")) die("skip GD not present");
+ if (!function_exists("imagecreate")) die("skip GD Version not compatible");
+?>
+--FILE--
+<?php
+
+require __DIR__ . '/func.inc';
+
+trycatch_dump(
+ fn() => imagecreate(-1, 30),
+ fn() => imagecreate(30, -1)
+);
+
+?>
+--EXPECT--
+!! [Error] Invalid width (x_size)
+!! [Error] Invalid height (y_size)
?>
--FILE--
<?php
-$image = imagecreatetruecolor(-1, 30);
-$image = imagecreatetruecolor(30, -1);
-?>
---EXPECTF--
-Warning: imagecreatetruecolor(): Invalid image dimensions in %s on line %d
-Warning: imagecreatetruecolor(): Invalid image dimensions in %s on line %d
+require __DIR__ . '/func.inc';
+
+trycatch_dump(
+ fn() => imagecreatetruecolor(-1, 30),
+ fn() => imagecreatetruecolor(30, -1)
+);
+
+?>
+--EXPECT--
+!! [Error] Invalid width (x_size)
+!! [Error] Invalid height (y_size)