]> granicus.if.org Git - nethack/commitdiff
fix RC file CHOOSE '[section] #comment'
authorPatR <rankin@nethack.org>
Sat, 29 Oct 2022 06:26:39 +0000 (23:26 -0700)
committerPatR <rankin@nethack.org>
Sat, 29 Oct 2022 06:26:39 +0000 (23:26 -0700)
Two years ago I modified the parsing for [section] labels for the
config file's CHOOSE directive to allow end-of-line comments, but
the code used had a logic error (don't think I can blame it on
copy+paste).  It looked for '#' after ']' but allowed anything--
rather than just spaces--in between.

"[section-name]abc#comment" would become "section-name" as if the
trailing junk hadn't been present.  Parsing that should produce
"section-name]abc" and get rejected as invalid.

src/files.c

index 7642c3a8e3d954a1bc71a2927ad27a576c5f59d3..464aecde78444a0da7fece5d4223806f300765c7 100644 (file)
@@ -2317,8 +2317,8 @@ free_config_sections(void)
    with spaces optional; returns pointer to "anything-except..." (with
    trailing " ] #..." stripped) if ok, otherwise Null */
 static char *
-is_config_section(char *str) /* trailing spaces will be stripped,
-                                ']' too iff result is good */
+is_config_section(
+    char *str) /* trailing spaces are stripped, ']' too iff result is good */
 {
     char *a, *c, *z;
 
@@ -2332,7 +2332,8 @@ is_config_section(char *str) /* trailing spaces will be stripped,
     z = index(a, ']');
     if (!z)
         return (char *) 0;
-    for (c = z + 1; *c && *c != '#'; ++c)
+    /* comment, if present, can be preceded by spaces */
+    for (c = z + 1; *c == ' '; ++c)
         continue;
     if (*c && *c != '#')
         return (char *) 0;