From 6e6b3b3922c5326050f4f5ab0711dd3ba52408a0 Mon Sep 17 00:00:00 2001 From: James Lucas Date: Tue, 16 May 2023 10:37:42 +1000 Subject: [PATCH 1/3] Fix bug GH-11246 cli/get_set_process_title Fail to clobber_error only when the argv is a non-contiguous area Don't increment the end_of_error if a non-contiguous area is encountered in environ --- NEWS | 4 ++++ sapi/cli/ps_title.c | 12 +++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index 9c44373d21534..9f750ce2b11c3 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,10 @@ PHP NEWS . Fixed bug GH-11222 (foreach by-ref may jump over keys during a rehash). (Bob) +- CLI: + . Fixed bug GH-11246 (cli/get_set_process_title fails + on MacOS). (James Lucas) + - Exif: . Fixed bug GH-10834 (exif_read_data() cannot read smaller stream wrapper chunk sizes). (nielsdos) diff --git a/sapi/cli/ps_title.c b/sapi/cli/ps_title.c index 7b00348be67cc..9e836f0ea0483 100644 --- a/sapi/cli/ps_title.c +++ b/sapi/cli/ps_title.c @@ -167,19 +167,21 @@ char** save_ps_args(int argc, char** argv) end_of_area = argv[i] + strlen(argv[i]); } + if (non_contiguous_area != 0) + goto clobber_error; + /* * check for contiguous environ strings following argv */ for (i = 0; (non_contiguous_area == 0) && (environ[i] != NULL); i++) { - if (end_of_area + 1 != environ[i]) + if (end_of_area + 1 != environ[i]) { non_contiguous_area = 1; - end_of_area = environ[i] + strlen(environ[i]); + } else { + end_of_area = environ[i] + strlen(environ[i]); + } } - if (non_contiguous_area != 0) - goto clobber_error; - ps_buffer = argv[0]; ps_buffer_size = end_of_area - argv[0]; From bc35595c0b27f3ab5dea46ba6855c55d0680c0bd Mon Sep 17 00:00:00 2001 From: James Lucas Date: Sun, 21 May 2023 22:13:32 +1000 Subject: [PATCH 2/3] Don't break early finding the end of the environ array --- sapi/cli/ps_title.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sapi/cli/ps_title.c b/sapi/cli/ps_title.c index 9e836f0ea0483..c44f73ea70090 100644 --- a/sapi/cli/ps_title.c +++ b/sapi/cli/ps_title.c @@ -175,11 +175,8 @@ char** save_ps_args(int argc, char** argv) */ for (i = 0; (non_contiguous_area == 0) && (environ[i] != NULL); i++) { - if (end_of_area + 1 != environ[i]) { - non_contiguous_area = 1; - } else { + if (end_of_area + 1 == environ[i]) end_of_area = environ[i] + strlen(environ[i]); - } } ps_buffer = argv[0]; From 5d0163c46c5499bf577a0ca127b248a3e48fc44a Mon Sep 17 00:00:00 2001 From: James Lucas Date: Wed, 31 May 2023 21:24:25 +1000 Subject: [PATCH 3/3] Remove unused non_contiguous_area variable --- sapi/cli/ps_title.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sapi/cli/ps_title.c b/sapi/cli/ps_title.c index c44f73ea70090..1dcfa7fc3378a 100644 --- a/sapi/cli/ps_title.c +++ b/sapi/cli/ps_title.c @@ -173,10 +173,11 @@ char** save_ps_args(int argc, char** argv) /* * check for contiguous environ strings following argv */ - for (i = 0; (non_contiguous_area == 0) && (environ[i] != NULL); i++) + for (i = 0; environ[i] != NULL; i++) { - if (end_of_area + 1 == environ[i]) + if (end_of_area + 1 == environ[i]) { end_of_area = environ[i] + strlen(environ[i]); + } } ps_buffer = argv[0];