Skip to content

ReferenceNames panics if there is a non-UTF-8 reference #1175

@bemoody

Description

@bemoody

git2::ReferenceNames is an iterator that lists the names of references in the repository. The documentation observes that ReferenceNames is more efficient compared to References, since ReferenceNames outputs a &str rather than a Reference.

The problem is that there might be references whose names aren't valid UTF-8 and therefore can't be represented as str. If such a reference is found, next will panic (str::from_utf8(bytes).unwrap(), at reference.rs line 498.)

For example, if I create a repository like this:

git init foo
cd foo
git branch -m $'\300'
git commit --allow-empty -m whoops

Then the following program will crash when invoked in foo:

fn main() {
    let repo = git2::Repository::open_from_env().expect("open_from_env");
    let mut refs = repo.references().expect("references");
    for name in refs.names() {
        println!("name: {name:?}");
    }
}

Instead, the iterator probably ought to produce an error value in this case. I don't know what that error should be, since it's not a libgit2 error.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions