]> granicus.if.org Git - procps-ng/commitdiff
top: plug a small potential hole in multi-byte support
authorJim Warner <james.warner@comcast.net>
Sun, 1 Oct 2017 22:59:59 +0000 (17:59 -0500)
committerCraig Small <csmall@enc.com.au>
Mon, 2 Oct 2017 11:20:58 +0000 (22:20 +1100)
Unlike the insp_mkrow_raw function the insp_mkrow_utf8
routine is not equipped to print non-ctl, non-printing
characters like '<7f>'. However, technically that very
value currently slips through the cracks. So with this
patch top will now print a space in the unlikely event
a character with the value of 127 is ever encountered.

Signed-off-by: Jim Warner <james.warner@comcast.net>
top/top.c

index d0b8bdc006f0a69c146f4b92ab110376035fb706..aef95ead43bab423a2a4f2bf0cd540df9ff0d1c5 100644 (file)
--- a/top/top.c
+++ b/top/top.c
@@ -3157,6 +3157,7 @@ static void insp_mkrow_utf8 (int col, int row) {
  #define mkCTL { if ((to += 2) <= Screen_cols) \
     PUTT("%s^%c%s", Curwin->capclr_msg, uch + '@', Caps_off); }
 #endif
+ #define mkNUL { buf1[0] = ' '; doPUT(buf1) }
  #define doPUT(buf) if (++to <= Screen_cols) putp(buf);
    static char buf1[2], buf2[3], buf3[4], buf4[5];
    char tline[BIGBUFSIZ];
@@ -3176,6 +3177,7 @@ static void insp_mkrow_utf8 (int col, int row) {
             case 1:
                if (uch == '\n')   break;
                else if (uch < 32) mkCTL
+               else if (uch == 127) mkNUL
                else { buf1[0] = uch; doPUT(buf1) }
                break;
             case 2:
@@ -3191,8 +3193,7 @@ static void insp_mkrow_utf8 (int col, int row) {
                doPUT(buf4)
                break;
             default:
-               buf1[0] = ' ';
-               doPUT(buf1)
+               mkNUL
                break;
          }
       } else {
@@ -3206,6 +3207,7 @@ static void insp_mkrow_utf8 (int col, int row) {
  #undef maxSZ
  #undef mkFND
  #undef mkCTL
+ #undef mkNUL
  #undef doPUT
 } // end: insp_mkrow_utf8