]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
agetty: fix \S usage
authorKarel Zak <kzak@redhat.com>
Wed, 20 Jul 2016 11:16:13 +0000 (13:16 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 20 Jul 2016 11:16:13 +0000 (13:16 +0200)
If \S without argument used then uninitialized 'varname' compared with
ANSI_COLOR.

Addresses: https://github.com/karelzak/util-linux/issues/329
Signed-off-by: Karel Zak <kzak@redhat.com>
term-utils/agetty.c

index f3fc66714c83eae247b130c314de53868b1b06da..3ad3612cd4aa51aa910b89c8a457660d962a03da 100644 (file)
@@ -2446,17 +2446,22 @@ static void output_special_char(unsigned char c, struct options *op,
        {
                char *var = NULL, varname[64];
 
-               if (get_escape_argument(fp, varname, sizeof(varname)))
+               /* \S{varname} */
+               if (get_escape_argument(fp, varname, sizeof(varname))) {
                        var = read_os_release(op, varname);
-               else if (!(var = read_os_release(op, "PRETTY_NAME")))
-                       var = uts.sysname;
-               if (var) {
-                       if (strcmp(varname, "ANSI_COLOR") == 0)
-                               printf("\033[%sm", var);
-                       else
-                               printf("%s", var);
-                       if (var != uts.sysname)
-                               free(var);
+                       if (var) {
+                               if (strcmp(varname, "ANSI_COLOR") == 0)
+                                       printf("\033[%sm", var);
+                               else
+                                       fputs(var, stdout);
+                       }
+               /* \S */
+               } else if ((var = read_os_release(op, "PRETTY_NAME"))) {
+                       fputs(var, stdout);
+
+               /* \S and PRETTY_NAME not found */
+               } else {
+                       fputs(uts.sysname, stdout);
                }
                break;
        }