Assuming curr cannot be NULL, why does this code cause a segmentation fault?

void check_dependencies(Rule *curr, Rule *target_head, Rule *other_head, char *line) {
    // line passed in starts at space right after ':'
    char *token = strtok(line, " ");
    while (token != NULL) {
        Dependency *new = malloc(sizeof(Dependency));
        Dependency *curr_dep;

        if (target_contains(target_head, token) != NULL) {
            new->rule = target_contains(target_head, token);
        } else if (other_contains(other_head, token) != NULL) {
            new->rule = other_contains(other_head, token);
        } else {
            // this target doesn't exist yet, create an 'other' Rule and attach to end of other lst
            Rule *new_rule = malloc(sizeof(Rule));
            Rule *curr_other = other_head;
            new_rule->actions = NULL;
            new_rule->dependencies = NULL;
            new_rule->next_rule = NULL;
            new_rule->target = malloc(sizeof(char) * (strlen(token) + 1));
            strncpy(new_rule->target, token, strlen(token) + 1);

            if (curr_other == NULL) {
                other_head = new_rule;
            } else {
                while (curr_other->next_rule != NULL) {
                    curr_other = curr_other->next_rule;
                }
                curr_other->next_rule = new_rule;
            }
        }

        if (curr->dependencies == NULL) {
            curr->dependencies = new;
            curr_dep = new;
        } else {
            curr_dep->next_dep = new;
            curr_dep = new;
        }

        token = strtok(NULL, " ");
    }
}