diff --git a/NEWS b/NEWS index 1fbe26ea833..e6e51432ee3 100644 --- a/NEWS +++ b/NEWS @@ -151,6 +151,8 @@ PHP NEWS . password_hash() will now chain the original RandomException to the ValueError on salt generation failure. (timwolla) . Fix GH-10239 (proc_close after proc_get_status always returns -1). (nielsdos) + . Improve the warning message for unpack() in case not enough values were + provided. (nielsdos) - Streams: . Fixed bug #51056: blocking fread() will block even if data is available. diff --git a/ext/standard/pack.c b/ext/standard/pack.c index f61214ca7e5..b5ff385e485 100644 --- a/ext/standard/pack.c +++ b/ext/standard/pack.c @@ -1178,7 +1178,7 @@ PHP_FUNCTION(unpack) /* Reached end of input for '*' repeater */ break; } else { - php_error_docref(NULL, E_WARNING, "Type %c: not enough input, need %d, have " ZEND_LONG_FMT, type, size, inputlen - inputpos); + php_error_docref(NULL, E_WARNING, "Type %c: not enough input values, need %d values but only " ZEND_LONG_FMT " %s provided", type, size, inputlen - inputpos, inputlen - inputpos == 1 ? "was" : "were"); zend_array_destroy(Z_ARR_P(return_value)); RETURN_FALSE; } diff --git a/ext/standard/tests/strings/bug61038.phpt b/ext/standard/tests/strings/bug61038.phpt index 3c0831a0cbc..d33be766346 100644 --- a/ext/standard/tests/strings/bug61038.phpt +++ b/ext/standard/tests/strings/bug61038.phpt @@ -17,7 +17,7 @@ array(1) { string(5) "str%c%c" } -Warning: unpack(): Type a: not enough input, need 6, have 5 in %s on line %d +Warning: unpack(): Type a: not enough input values, need 6 values but only 5 were provided in %s on line %d bool(false) array(1) { [1]=> diff --git a/ext/standard/tests/strings/pack_Z.phpt b/ext/standard/tests/strings/pack_Z.phpt index 672077bd89a..ac0608a9bd0 100644 --- a/ext/standard/tests/strings/pack_Z.phpt +++ b/ext/standard/tests/strings/pack_Z.phpt @@ -18,7 +18,7 @@ var_dump( ); ?> --EXPECTF-- -Warning: unpack(): Type Z: not enough input, need 2, have 1 in %s on line %d +Warning: unpack(): Type Z: not enough input values, need 2 values but only 1 was provided in %s on line %d string(0) "" string(5) "foo%c%c" string(4) "foo%c"