libgit2 / git2go

Git to Go; bindings for libgit2. Like McDonald's but tastier.
MIT License
1.92k stars 316 forks source link

Segfault when calling `index.AddAll` #917

Open pjbgf opened 2 years ago

pjbgf commented 2 years ago

We have experienced index.AddAll causing segfaults. The exact same code depending on the machine it is running on and the repository it is adding files to, may consistently result in a segfault from a background thread: signal: segmentation fault (core dumped).

In other cases, it may not happen as consistently or not happen at all. The code extract below is what led to the segfault:

    var parentC []*libgit2.Commit
    head, err := headCommit(repo)
    if err == nil {
        defer head.Free()
        parentC = append(parentC, head)
    }

    index, err := repo.Index()
    if err != nil {
        return "", err
    }
    defer index.Free()

    tracelog.Info("adding files to index")
    c := 1
    err = index.AddAll(nil, libgit2.IndexAddDefault, func(s1, s2 string) error {
        tracelog.Info("adding file", "name", s1, "count", c)
        c += 1
        return nil
    })
    if err != nil {
        return "", err
    }
    tracelog.Info("added files to index")

https://github.com/fluxcd/image-automation-controller/blob/235edabafd1ce34c15635d6c6b5aea18d298a4d3/controllers/imageupdateautomation_controller.go#L627

Versions:

Relates to https://github.com/fluxcd/image-automation-controller/issues/339