]> git.alsa-project.org Git - alsa-lib.git/commitdiff
conf.c: snd_config_set_id: prevent duplicate ids
authorClemens Ladisch <clemens@ladisch.de>
Fri, 10 Jul 2009 05:25:50 +0000 (07:25 +0200)
committerClemens Ladisch <clemens@ladisch.de>
Fri, 10 Jul 2009 05:25:50 +0000 (07:25 +0200)
snd_config_add() checks for duplicate ids, but it was possible to create
duplicates by adding a note and changing the id afterwards with
snd_config_set_id(); so we have to add a check there, too.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
src/conf.c

index ff9d4332ee1aaf67462aa378399471e917397bb3..d1fa109772d355dc7cab5941056e41c762deb290 100644 (file)
@@ -1521,9 +1521,17 @@ int snd_config_get_id(const snd_config_t *config, const char **id)
  */
 int snd_config_set_id(snd_config_t *config, const char *id)
 {
+       snd_config_iterator_t i, next;
        char *new_id;
        assert(config);
        if (id) {
+               if (config->father) {
+                       snd_config_for_each(i, next, config->father) {
+                               snd_config_t *n = snd_config_iterator_entry(i);
+                               if (n != config && strcmp(id, n->id) == 0)
+                                       return -EEXIST;
+                       }
+               }
                new_id = strdup(id);
                if (!new_id)
                        return -ENOMEM;