1 From 6508db29ded734ac4ff5e5e19486c143c9eb3d89 Mon Sep 17 00:00:00 2001
2 From: Karel Zak <kzak@redhat.com>
3 Date: Fri, 21 Nov 2014 12:23:47 +0100
4 Subject: [PATCH] lib/colors: use static buffers when parse scheme
6 * use static buffers when parse scheme colors
7 * cleanup deallocation on error in sequence parser
9 Signed-off-by: Karel Zak <kzak@redhat.com>
12 This is modified upstream patch.
16 @@ -416,28 +416,31 @@ static int colors_add_scheme(struct ul_c
20 - struct ul_color_scheme *cs;
22 + struct ul_color_scheme *cs = NULL;
26 if (!cc || !name || !*name || !seq0 || !*seq0)
29 rc = cn_sequence(seq0, &seq);
36 /* convert logical name (e.g. "red") to real ESC code */
38 const char *s = color_sequence_from_colorname(seq);
54 @@ -447,17 +450,28 @@ static int colors_add_scheme(struct ul_c
55 void *tmp = realloc(cc->schemes, (cc->nschemes + 10)
56 * sizeof(struct ul_color_scheme));
61 cc->schemes_sz = cc->nschemes + 10;
65 - cs = &cc->schemes[cc->nschemes++];
67 + cs = &cc->schemes[cc->nschemes];
69 + cs->name = strdup(name);
79 + cs->seq = cs->name = NULL;
86 @@ -543,7 +557,8 @@ static int colors_read_schemes(struct ul
95 rc = colors_read_configuration(cc);
96 @@ -560,7 +575,6 @@ static int colors_read_schemes(struct ul
99 while (fgets(buf, sizeof(buf), f)) {
100 - char *cn = NULL, *seq = NULL;
101 char *p = strchr(buf, '\n');
104 @@ -576,17 +590,14 @@ static int colors_read_schemes(struct ul
105 if (*p == '\0' || *p == '#')
108 - rc = sscanf(p, UL_SCNsA" " /* name */
109 - UL_SCNsA, /* color */
111 - if (rc == 2 && cn && seq)
112 + rc = sscanf(p, "%128[^ ] %128[^\n ]", cn, seq);
113 + if (rc == 2 && *cn && *seq) {
114 rc = colors_add_scheme(cc, cn, seq); /* set rc=0 on success */