]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
hwdb: fix detection of assignments with no key
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 1 Dec 2016 16:32:41 +0000 (11:32 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 1 Dec 2016 16:57:08 +0000 (11:57 -0500)
The code was trying to detect an empty key, but property lines always
start with a space, so the condition was wrong.

Now:
[/tmp/tmp.YWeKax4fMI/etc/udev/hwdb.d/10-bad.hwdb:14] Empty key in " =NO_NAME", ignoring
[/tmp/tmp.YWeKax4fMI/etc/udev/hwdb.d/10-bad.hwdb:15] Empty value in " NO_VALUE=", ignoring

src/hwdb/hwdb.c

index 6d4a03bedba7dbe172b03f3893f3435533d127fb..d2fe75fc7929201fc8abde8fe8ba2b187a08f9f4 100644 (file)
@@ -456,6 +456,8 @@ static int insert_data(struct trie *trie, char **match_list, char *line,
                        const char *filename, uint16_t file_priority, uint32_t line_number) {
         char *value, **entry;
 
+        assert(line[0] == ' ');
+
         value = strchr(line, '=');
         if (!value)
                 return log_syntax(NULL, LOG_WARNING, filename, line_number, EINVAL,
@@ -464,13 +466,15 @@ static int insert_data(struct trie *trie, char **match_list, char *line,
         value[0] = '\0';
         value++;
 
-        /* libudev requires properties to start with a space */
+        /* Replace multiple leading spaces by a single space */
         while (isblank(line[0]) && isblank(line[1]))
                 line++;
 
-        if (line[0] == '\0' || value[0] == '\0')
+        if (isempty(line + 1) || isempty(value))
                 return log_syntax(NULL, LOG_WARNING, filename, line_number, EINVAL,
-                                  "Empty %s in \"%s\", ignoring", line[0] == '\0' ? "key" : "value", line);
+                                  "Empty %s in \"%s=%s\", ignoring",
+                                  isempty(line + 1) ? "key" : "value",
+                                  line, value);
 
         STRV_FOREACH(entry, match_list)
                 trie_insert(trie, trie->root, *entry, line, value, filename, file_priority, line_number);