From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alan Jenkins Date: Fri, 05 Sep 2008 13:49:34 +0000 Subject: [PATCH] fix bug in name_list_key_add() Message-Id: <48C138EE.1000408@tuffmail.co.uk> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-hotplug@vger.kernel.org The search for an existing key e.g. FOO would match longer keys e.g. FOOBAR. Reuse the correct code from name_list_remove(). diff --git a/udev/udev_utils.c b/udev/udev_utils.c index f63a9fa..9b6ba24 100644 --- a/udev/udev_utils.c +++ b/udev/udev_utils.c @@ -89,14 +89,17 @@ struct name_entry *name_list_key_add(struct list_head *name_list, const char *ke { struct name_entry *name_loop; struct name_entry *name_new; + size_t keylen = strlen(key); list_for_each_entry(name_loop, name_list, node) { - if (strncmp(name_loop->name, key, strlen(key)) = 0) { - dbg("key already present '%s', replace it\n", name_loop->name); - snprintf(name_loop->name, sizeof(name_loop->name), "%s=%s", key, value); - name_loop->name[sizeof(name_loop->name)-1] = '\0'; - return name_loop; - } + if (strncmp(name_loop->name, key, keylen) != 0) + continue; + if (name_loop->name[keylen] != '=') + continue; + dbg("key already present '%s', replace it\n", name_loop->name); + snprintf(name_loop->name, sizeof(name_loop->name), "%s=%s", key, value); + name_loop->name[sizeof(name_loop->name)-1] = '\0'; + return name_loop; } name_new = malloc(sizeof(struct name_entry));