diff --git a/test/udev-test.pl b/test/udev-test.pl index 4f61ce3e5dd..788bbeac259 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: