Skip to content

Commit

Permalink
Make imagegd $file parameter nullable
Browse files Browse the repository at this point in the history
It is explicitly documented to be nullable, and this matches other
functions like imagepng. It is also documented to accept a stream,
which it currently does not...
  • Loading branch information
nikic committed Feb 9, 2021
1 parent d4aff25 commit 838ae01
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 18 deletions.
22 changes: 9 additions & 13 deletions ext/gd/gd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1778,36 +1778,32 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char
char *file = NULL;
zend_long quality = 0, type = 0;
gdImagePtr im;
char *fn = NULL;
FILE *fp;
size_t file_len = 0;
int argc = ZEND_NUM_ARGS();
int q = -1, t = 1;

/* The quality parameter for gd2 stands for chunk size */

if (zend_parse_parameters(argc, "O|pll", &imgind, gd_image_ce, &file, &file_len, &quality, &type) == FAILURE) {
if (zend_parse_parameters(argc, "O|p!ll", &imgind, gd_image_ce, &file, &file_len, &quality, &type) == FAILURE) {
RETURN_THROWS();
}

im = php_gd_libgdimageptr_from_zval_p(imgind);

if (argc > 1) {
fn = file;
if (argc >= 3) {
q = quality;
if (argc == 4) {
t = type;
}
if (argc >= 3) {
q = quality;
if (argc == 4) {
t = type;
}
}

if (argc >= 2 && file_len) {
PHP_GD_CHECK_OPEN_BASEDIR(fn, "Invalid filename");
if (file_len) {
PHP_GD_CHECK_OPEN_BASEDIR(file, "Invalid filename");

fp = VCWD_FOPEN(fn, "wb");
fp = VCWD_FOPEN(file, "wb");
if (!fp) {
php_error_docref(NULL, E_WARNING, "Unable to open \"%s\" for writing", fn);
php_error_docref(NULL, E_WARNING, "Unable to open \"%s\" for writing", file);
RETURN_FALSE;
}

Expand Down
4 changes: 2 additions & 2 deletions ext/gd/gd.stub.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,9 @@ function imagejpeg(GdImage $image, $file = null, int $quality = -1): bool {}
/** @param resource|string|null $file */
function imagewbmp(GdImage $image, $file = null, ?int $foreground_color = null): bool {}

function imagegd(GdImage $image, string $file = UNKNOWN): bool {}
function imagegd(GdImage $image, ?string $file = null): bool {}

function imagegd2(GdImage $image, string $file = UNKNOWN, int $chunk_size = UNKNOWN, int $mode = UNKNOWN): bool {}
function imagegd2(GdImage $image, ?string $file = null, int $chunk_size = UNKNOWN, int $mode = UNKNOWN): bool {}

#ifdef HAVE_GD_BMP
/** @param resource|string|null $file */
Expand Down
6 changes: 3 additions & 3 deletions ext/gd/gd_arginfo.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: 59256d0de105f1a2f5d5fc1e20f8090031b42a76 */
* Stub hash: 63898b501cc3ae38585fe0c6f70a9f7865fbee4d */

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_gd_info, 0, 0, IS_ARRAY, 0)
ZEND_END_ARG_INFO()
Expand Down Expand Up @@ -238,12 +238,12 @@ ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagegd, 0, 1, _IS_BOOL, 0)
ZEND_ARG_OBJ_INFO(0, image, GdImage, 0)
ZEND_ARG_TYPE_INFO(0, file, IS_STRING, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, file, IS_STRING, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_imagegd2, 0, 1, _IS_BOOL, 0)
ZEND_ARG_OBJ_INFO(0, image, GdImage, 0)
ZEND_ARG_TYPE_INFO(0, file, IS_STRING, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, file, IS_STRING, 1, "null")
ZEND_ARG_TYPE_INFO(0, chunk_size, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
ZEND_END_ARG_INFO()
Expand Down

0 comments on commit 838ae01

Please sign in to comment.