From: Kay Sievers Date: Wed, 13 May 2009 16:01:32 +0000 (+0200) Subject: fix possible endless loop for GOTO to non-existent LABEL X-Git-Tag: 174~1046 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0c37798916bc87d72f5f1399d9e050307901db84;p=systemd fix possible endless loop for GOTO to non-existent LABEL http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526365 --- diff --git a/test/udev-test.pl b/test/udev-test.pl index 4f61ce3e..788bbeac 100755 --- a/test/udev-test.pl +++ b/test/udev-test.pl @@ -1554,6 +1554,17 @@ KERNEL=="sda1", GOTO="BAD" KERNEL=="sda1", NAME="", LABEL="NO" KERNEL=="sda1", NAME="right", LABEL="TEST" KERNEL=="sda1", LABEL="BAD" +EOF + }, + { + desc => "GOTO label does not exist", + subsys => "block", + devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1", + exp_name => "right", + rules => <buf[rules->tokens[j].rule.label_off]) != 0) continue; rules->tokens[i].key.rule_goto = j; + break; } if (rules->tokens[i].key.rule_goto == 0) err(rules->udev, "GOTO '%s' has no matching label in: '%s'\n", label, filename); @@ -2504,6 +2505,8 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event break; } case TK_A_GOTO: + if (cur->key.rule_goto == 0) + break; cur = &rules->tokens[cur->key.rule_goto]; continue; case TK_A_LAST_RULE: