[kbd] [PATCH] libkeymap: Fix mk_mapname for the plain map

Javier Pello García javier.pello at urjc.es
Fri Dec 6 18:58:03 MSK 2019


mk_mapname did not correctly return "plain" for the plain map
(no modifier set) if it had already been called, as it did not
correctly reset the static buffer that it uses for the map name.
When mk_mapname is called for the first time from the first loop
in lk_dump_ctable, all is fine, since buf has not been used yet
and it is initialised to 0. However, when it is called again for
the plain map from the second loop in lk_dump_ctable, buf already
contains a value (left over from the last iteration in the first
loop), and then strcat appends "plain" to that value instead of
overwriting it, resulting in a bogus value.

Signed-off-by: Javier Pello <javier.pello at urjc.es>
---
 src/libkeymap/dump.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/libkeymap/dump.c b/src/libkeymap/dump.c
index 8531b5aa..02c8eab4 100644
--- a/src/libkeymap/dump.c
+++ b/src/libkeymap/dump.c
@@ -91,7 +91,7 @@ fail:
 	return -1;
 }
 
-static char *
+static const char *
 mk_mapname(char modifier)
 {
 	static const char *mods[8] = {
@@ -100,10 +100,8 @@ mk_mapname(char modifier)
 	static char buf[60];
 	int i;
 
-	if (!modifier) {
-		strcat(buf, "plain");
-		return buf;
-	}
+	if (!modifier)
+		return "plain";
 	buf[0] = 0;
 	for (i = 0; i < 8; i++)
 		if (modifier & (1 << i)) {
-- 
2.23.0


More information about the kbd mailing list