1. 14 Nov, 2016 19 commits
  2. 11 Nov, 2016 3 commits
    • git_repository_open_ext: fix handling of $GIT_NAMESPACE · c9e967a1
      The existing code would set a namespace of "" (empty string) with
      GIT_NAMESPACE unset.  In a repository where refs/heads/namespaces/
      exists, that can produce incorrect results.  Detect that case and avoid
      setting the namespace at all.
      
      Since that makes the last assignment to error conditional, and the
      previous assignment can potentially get GIT_ENOTFOUND, set error to 0
      explicitly to prevent the call from incorrectly failing with
      GIT_ENOTFOUND.
      Josh Triplett committed
    • curl_stream: check for -1 after CURLINFO_LASTSOCKET · 5ca75fd5
      We're recently trying to upgrade to the current master of libgit2
      in Cargo but we're unfortunately hitting a segfault in one of our
      tests. This particular test is just a small smoke test that https
      works (e.g. it's configured in libgit2). It attempts to clone
      from a URL which simply immediately drops connections after
      they're accepted (e.g. terminate abnormally). We expect to see a
      standard error from libgit2 but unfortunately we're seeing a
      segfault.
      
      This segfault is happening inside of the `wait_for` function of
      `curl_stream.c` at the line `FD_SET(fd, &errfd)` because `fd` is
      -1. This ends up doing an out-of-bounds array access that faults
      the program. I tracked back to where this -1 came from to the
      line here (returned by `CURLINFO_LASTSOCKET`) and added a check
      to return an error.
      Alex Crichton committed
  3. 04 Nov, 2016 4 commits
  4. 02 Nov, 2016 12 commits
  5. 01 Nov, 2016 2 commits
    • global: synchronize initialization and shutdown with pthreads · 59c6c286
      When trying to initialize and tear down global data structures
      from different threads at once with `git_libgit2_init` and
      `git_libgit2_shutdown`, we race around initializing data. While
      we use `pthread_once` to assert that we only initilize data a
      single time, we actually reset the `pthread_once_t` on the last
      call to `git_libgit2_shutdown`. As resetting this variable is not
      synchronized with other threads trying to access it, this is
      actually racy when one thread tries to do a complete shutdown of
      libgit2 while another thread tries to initialize it.
      
      Fix the issue by creating a mutex which synchronizes `init_once`
      and the library shutdown.
      Patrick Steinhardt committed