parent
3e712f7136
commit
0d945abdb6
@ -0,0 +1,44 @@
|
||||
diff -up ./ps/display.c.ori ./ps/display.c
|
||||
--- ./ps/display.c.ori 2021-02-09 11:11:25.000000000 +0100
|
||||
+++ ./ps/display.c 2022-11-29 18:39:13.254573784 +0100
|
||||
@@ -44,6 +44,8 @@
|
||||
#define SIGCHLD SIGCLD
|
||||
#endif
|
||||
|
||||
+#define SIG_IS_TERM_OR_HUP(signo) (((signo) == SIGTERM) || (signo) == SIGHUP)
|
||||
+
|
||||
char *myname;
|
||||
|
||||
/* just reports a crash */
|
||||
@@ -54,20 +56,23 @@ static void signal_handler(int signo){
|
||||
sigprocmask(SIG_BLOCK, &ss, NULL);
|
||||
if(signo==SIGPIPE) _exit(0); /* "ps | head" will cause this */
|
||||
/* fprintf() is not reentrant, but we _exit() anyway */
|
||||
- fprintf(stderr,
|
||||
- _("Signal %d (%s) caught by %s (%s).\n"),
|
||||
- signo,
|
||||
- signal_number_to_name(signo),
|
||||
- myname,
|
||||
- PACKAGE_VERSION
|
||||
- );
|
||||
+ if (!SIG_IS_TERM_OR_HUP(signo)) {
|
||||
+ fprintf(stderr,
|
||||
+ _("Signal %d (%s) caught by %s (%s).\n"),
|
||||
+ signo,
|
||||
+ signal_number_to_name(signo),
|
||||
+ myname,
|
||||
+ PACKAGE_VERSION
|
||||
+ );
|
||||
+ }
|
||||
switch (signo) {
|
||||
case SIGHUP:
|
||||
case SIGUSR1:
|
||||
case SIGUSR2:
|
||||
exit(EXIT_FAILURE);
|
||||
default:
|
||||
- error_at_line(0, 0, __FILE__, __LINE__, "%s", _("please report this bug"));
|
||||
+ if (!SIG_IS_TERM_OR_HUP(signo))
|
||||
+ error_at_line(0, 0, __FILE__, __LINE__, "%s", _("please report this bug"));
|
||||
signal(signo, SIG_DFL); /* allow core file creation */
|
||||
sigemptyset(&ss);
|
||||
sigaddset(&ss, signo);
|
@ -0,0 +1,23 @@
|
||||
diff --git a/ps/display.c b/ps/display.c
|
||||
index 1927fd6..e7ab351 100644
|
||||
--- a/ps/display.c
|
||||
+++ b/ps/display.c
|
||||
@@ -357,7 +357,7 @@ static void simple_spew(void){
|
||||
if (selection_list && selection_list->typecode == SEL_PID_QUICK) {
|
||||
flags |= PROC_PID;
|
||||
|
||||
- pidlist = (pid_t*) malloc(selection_list->n * sizeof(pid_t));
|
||||
+ pidlist = (pid_t*) malloc((selection_list->n + 1) * sizeof(pid_t));
|
||||
if (!pidlist) {
|
||||
fprintf(stderr, _("error: not enough memory\n"));
|
||||
exit(1);
|
||||
@@ -366,6 +366,9 @@ static void simple_spew(void){
|
||||
for (i = 0; i < selection_list->n; i++) {
|
||||
pidlist[i] = selection_list->u[selection_list->n-i-1].pid;
|
||||
}
|
||||
+
|
||||
+ // delimit the array with nul object (0); RHBZ#2153813
|
||||
+ pidlist[selection_list->n] = (pid_t)0;
|
||||
}
|
||||
|
||||
ptp = openproc(flags, pidlist);
|
Loading…
Reference in new issue