]> granicus.if.org Git - procps-ng/commitdiff
ps: restore aix behavior while keeping an original fix
authorJim Warner <james.warner@comcast.net>
Wed, 30 Mar 2022 17:00:00 +0000 (12:00 -0500)
committerCraig Small <csmall@dropbear.xyz>
Fri, 1 Apr 2022 06:13:25 +0000 (17:13 +1100)
The commit shown below broke the aix behavior that Dr.
Fink recently reported. However, in the proposed patch
the old behavior, showing garbage when '%cpu' was used
with an invalid formatting option, would appear again.

So this patch, based on Werner's patch, goes the extra
distance to prevent that. Along the way we'll disallow
commas in the aix format str to prevent their display.

Reference(s):
https://www.freelists.org/post/procps/Procpsng-400-released-with-newlib,2
. Mar, 2022 - where aix bug was introduced
commit 81df85a1b528d4edb9ab98b37fb6c6244430b6c4

Prototyped-by: Dr. Werner Fink <werner@suse.de>
Signed-off-by: Jim Warner <james.warner@comcast.net>
ps/display.c
ps/sortformat.c

index 11c3a8325db0921674d2e4d46edc1332f7ea12e0..75c7d9264263055dfc87340f211e94b2b75c2f9f 100644 (file)
@@ -592,7 +592,7 @@ static void finalize_stacks (void)
   // now accommodate any results not yet satisfied
   f_node = format_list;
   while (f_node) {
-    (*f_node->pr)(NULL, NULL);
+    if (*f_node->pr) (*f_node->pr)(NULL, NULL);
     f_node = f_node->next;
   }
   s_node = sort_list;
index 2293aa950b6686524db47d0cd28cd82ab61eb2b0..965219c2e1f873f8809487f7f38aa4a836fa7555 100644 (file)
@@ -132,17 +132,20 @@ static const char *aix_format_parse(sf_node *sfn){
     c = *walk++;
     if(c=='%')    goto get_desc;
     if(!c)        goto looks_ok;
+    if(c==',')    goto aix_oops;
   /* get_text: */
     items++;
-  get_more_text:
+  get_more:
     c = *walk++;
     if(c=='%')    goto get_desc;
-    if(c)         goto get_more_text;
+    if(c==' ')    goto get_more;
+    if(c)         goto aix_oops;
     goto looks_ok;
   get_desc:
     items++;
     c = *walk++;
     if(c)         goto initial;
+  aix_oops:
     return _("improper AIX field descriptor");
   looks_ok:
     ;
@@ -313,8 +316,7 @@ static const char *format_parse(sf_node *sfn){
   if(0) improper: err=_("improper format list");
   if(0) badwidth: err=_("column widths must be unsigned decimal numbers");
   if(0) notmacro: err=_("can not set width for a macro (multi-column) format specifier");
-  if (!err)
-    if(strchr(sfn->sf,'%')) err = aix_format_parse(sfn);
+  if(strchr(sfn->sf,'%')) err = aix_format_parse(sfn);
   return err;
 }