Skip to content

Commit 847d140

Browse files
committed
Fix GH-17208: bug64539-status-json-encoding.phpt fail on 32-bits
The reason this breaks is because of a type mismatch. The following line uses fields of the timeval struct which are both 8 bytes on Alpine 32-bit, which results in a computed value of also 8 bytes: https://github.com/php/php-src/blob/b09ed9a0f25cda8c9eea9d140c01587cd50b4aa8/sapi/fpm/fpm/fpm_status.c#L611 However, it is passed to a format string which expects 4 bytes (`unsigned long` and thus the `%lu` format specifier is 4 bytes on Alpine 32-bit), resulting in argument corruption. Since the value is generally small, truncating to 4 bytes is sufficient to fix this. Closes GH-17286.
1 parent b621b3a commit 847d140

File tree

2 files changed

+3
-1
lines changed

2 files changed

+3
-1
lines changed

NEWS

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ PHP NEWS
3838
. Fixed bug GH-13437 (FPM: ERROR: scoreboard: failed to lock (already
3939
locked)). (Jakub Zelenka)
4040
. Fixed bug GH-17112 (Macro redefinitions). (cmb, nielsdos)
41+
. Fixed bug GH-17208 (bug64539-status-json-encoding.phpt fail on 32-bits).
42+
(nielsdos)
4143

4244
- GD:
4345
. Fixed bug GH-16255 (Unexpected nan value in ext/gd/libgd/gd_filter.c).

sapi/fpm/fpm/fpm_status.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ int fpm_status_handle_request(void) /* {{{ */
598598
time_buffer,
599599
(unsigned long) (now_epoch - proc->start_epoch),
600600
proc->requests,
601-
duration.tv_sec * 1000000UL + duration.tv_usec,
601+
(unsigned long) (duration.tv_sec * 1000000UL + duration.tv_usec),
602602
proc->request_method[0] != '\0' ? proc->request_method : "-",
603603
proc->request_uri[0] != '\0' ? proc->request_uri : "-",
604604
query_string ? "?" : "",

0 commit comments

Comments
 (0)