From ac528431dd60c6b7f6b664ba430b937a11a32230 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Tue, 5 Sep 2006 00:50:25 +0200 Subject: [PATCH] fix ENV{TEST}="Test: $env{TEST}" --- test/udev-test.pl | 13 +++++++++++++ udev_rules.c | 10 ++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/test/udev-test.pl b/test/udev-test.pl index 1117ecb..464098f 100755 --- a/test/udev-test.pl +++ b/test/udev-test.pl @@ -1248,6 +1248,19 @@ SUBSYSTEMS=="scsi", KERNEL=="sda1", NAME="bad" EOF }, { + desc => "ENV{} test (assign 2 times)", + subsys => "block", + devpath => "/block/sda/sda1", + exp_name => "true", + rules => < "ENV{} test (assign2)", subsys => "block", devpath => "/block/sda/sda1", diff --git a/udev_rules.c b/udev_rules.c index 8a2066d..1483f8f 100644 --- a/udev_rules.c +++ b/udev_rules.c @@ -802,13 +802,19 @@ try_parent: struct key_pair *pair = &rule->env.keys[i]; if (pair->key.operation == KEY_OP_ASSIGN) { + char temp_value[NAME_SIZE]; const char *key_name = key_pair_name(rule, pair); const char *value = key_val(rule, &pair->key); - char *key_value = name_list_key_add(&udev->env_list, key_name, value); + char *key_value; + + /* make sure we don't write to the same string we possibly read from */ + strlcpy(temp_value, value, sizeof(temp_value)); + udev_rules_apply_format(udev, temp_value, NAME_SIZE); + + key_value = name_list_key_add(&udev->env_list, key_name, temp_value); if (key_value == NULL) break; - udev_rules_apply_format(udev, key_value, NAME_SIZE); putenv(key_value); dbg("export ENV '%s'", key_value); } -- 2.7.4