diff --git a/NEWS b/NEWS index 89379fbe15c..1e464855071 100644 --- a/NEWS +++ b/NEWS @@ -85,6 +85,8 @@ PHP NEWS literal). (Ilia) - Fixed bug #47616 (curl keeps crashing). (Felipe) - Fixed bug #47598 (FILTER_VALIDATE_EMAIL is locale aware). (Ilia) +- Fixed bug #47566 (pcntl_wexitstatus() returns signed status). + (patch by james at jamesreno dot com) - Fixed bug #47564 (unpacking unsigned long 32bit bit endian returns wrong result). (Ilia) - Fixed bug #47487 (performance degraded when reading large chunks after fix of diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c index fbc8b8b84a8..46a3a96d4f3 100755 --- a/ext/pcntl/pcntl.c +++ b/ext/pcntl/pcntl.c @@ -374,9 +374,7 @@ PHP_FUNCTION(pcntl_wexitstatus) status_word = (int) Z_LVAL_PP(status); - /* WEXITSTATUS only returns 8 bits so we *MUST* cast this to signed char - if you want to have valid negative exit codes */ - RETURN_LONG((signed char) WEXITSTATUS(status_word)); + RETURN_LONG(WEXITSTATUS(status_word)); #else RETURN_FALSE; #endif diff --git a/ext/pcntl/tests/001.phpt b/ext/pcntl/tests/001.phpt index 74c529124bf..9543d57eb5e 100644 --- a/ext/pcntl/tests/001.phpt +++ b/ext/pcntl/tests/001.phpt @@ -73,7 +73,7 @@ test_stop_signal(); Staring wait.h tests.... Testing pcntl_wifexited and wexitstatus.... -Exited With: -1 +Exited With: 255 Testing pcntl_wifsignaled.... Process was terminated by signal : SIGTERM diff --git a/ext/pcntl/tests/bug47566.phpt b/ext/pcntl/tests/bug47566.phpt new file mode 100644 index 00000000000..8a69e6bc738 --- /dev/null +++ b/ext/pcntl/tests/bug47566.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #47566 (return value of pcntl_wexitstatus()) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +int(128)