1. 20 Dec, 2017 6 commits
    • zstream: use UINT_MAX sized chunks · 8642feba
      Instead of paging to zlib in INT_MAX sized chunks, we can give it
      as many as UINT_MAX bytes at a time.  zlib doesn't care how big
      a buffer we give it, this simply results in fewer calls into zlib.
      Edward Thomson committed
    • odb: support large loose objects · ddefea75
      zlib will only inflate/deflate an `int`s worth of data at a time.
      We need to loop through large files in order to ensure that we inflate
      the entire file, not just an `int`s worth of data.  Thankfully, we
      already have this loop in our `git_zstream` layer.  Handle large objects
      using the `git_zstream`.
      Edward Thomson committed
    • object: introduce git_object_stringn2type · d1e44655
      Introduce an internal API to get the object type based on a
      length-specified (not null terminated) string representation.  This can
      be used to compare the (space terminated) object type name in a loose
      object.
      
      Reimplement `git_object_string2type` based on this API.
      Edward Thomson committed
    • odb: test loose reading/writing large objects · dacc3291
      Introduce a test for very large objects in the ODB.  Write a large
      object (5 GB) and ensure that the write succeeds and provides us the
      expected object ID.  Introduce a test that writes that file and
      ensures that we can subsequently read it.
      Edward Thomson committed
    • util: introduce `git__prefixncmp` and consolidate implementations · 86219f40
      Introduce `git_prefixncmp` that will search up to the first `n`
      characters of a string to see if it is prefixed by another string.
      This is useful for examining if a non-null terminated character
      array is prefixed by a particular substring.
      
      Consolidate the various implementations of `git__prefixcmp` around a
      single core implementation and add some test cases to validate its
      behavior.
      Edward Thomson committed
    • zstream: treat `Z_BUF_ERROR` as non-fatal · b7d36ef4
      zlib will return `Z_BUF_ERROR` whenever there is more input to inflate
      or deflate than there is output to store the result.  This is normal for
      us as we iterate through the input, particularly with very large input
      buffers.
      Edward Thomson committed
  2. 19 Dec, 2017 1 commit
  3. 18 Dec, 2017 1 commit
  4. 16 Dec, 2017 1 commit
  5. 15 Dec, 2017 3 commits
  6. 14 Dec, 2017 1 commit
  7. 08 Dec, 2017 2 commits
  8. 06 Dec, 2017 1 commit
  9. 01 Dec, 2017 2 commits
  10. 30 Nov, 2017 7 commits
    • Merge pull request #4426 from pks-t/pks/diff-flag-set-fix · 494a2f23
      diff_generate: fix unsetting diff flags
      Edward Thomson committed
    • Merge pull request #4424 from tiennou/fix/incorrect-winhttp-cert-payload · 6cf53e8f
      Use the same cert checking payload in WinHTTP
      Edward Thomson committed
    • openssl: fix thread-safety on non-glibc POSIX systems · 2d2e70f8
      While the OpenSSL library provides all means to work safely in a
      multi-threaded application, we fail to do so correctly. Quoting from
      crypto_lock(3):
      
          OpenSSL can safely be used in multi-threaded applications provided
          that at least two callback functions are set, locking_function and
          threadid_func.
      
      We do in fact provide the means to set up the locking function via
      `git_openssl_set_locking()`, where we initialize a set of locks by using
      the POSIX threads API and set the correct callback function to lock and
      unlock them.
      
      But what we do not do is setting the `threadid_func` callback. This
      function is being used to correctly locate thread-local data of the
      OpenSSL library and should thus return per-thread identifiers. Digging
      deeper into OpenSSL's documentation, the library does provide a fallback
      in case that locking function is not provided by the user. On Windows
      and BeOS we should be safe, as it simply "uses the system's default
      thread identifying API". On other platforms though OpenSSL will fall
      back to using the address of `errno`, assuming it is thread-local.
      
      While this assumption holds true for glibc-based systems, POSIX in fact
      does not specify whether it is thread-local or not. Quoting from
      errno(3p):
      
          It is unspecified whether errno is a macro or an identifier declared
          with external linkage.
      
      And in fact, with musl there is at least one libc implementation which
      simply declares `errno` as a simple `int` without being thread-local. On
      those systems, the fallback threadid function of OpenSSL will not be
      thread-safe.
      
      Fix this by setting up our own callback for this setting. As users of
      libgit2 may want to set it themselves, we obviously cannot always set
      that function on initialization. But as we already set up primitives for
      threading in `git_openssl_set_locking()`, this function becomes the
      obvious choice where to implement the additional setup.
      Patrick Steinhardt committed
    • diff_generate: fix unsetting diff flags · 5ca3f115
      The macro `DIFF_FLAG_SET` can be used to set or unset a flag by
      modifying the diff's bitmask. While the case of setting the flag is
      handled correctly, the case of unsetting the flag was not. Instead of
      inverting the flags, we are inverting the value which is used to decide
      whether we want to set or unset the bits.
      
      The value being used here is a simple `bool` which is `false`. As that
      is being uplifted to `int` when getting the bitwise-complement, we will
      end up retaining all bits inside of the bitmask. As that's only ever
      used to set `GIT_DIFF_IGNORE_CASE`, we were actually always ignoring
      case for generated diffs.
      
      Fix that by instead getting the bitwise-complement of `FLAG`, not `VAL`.
      Patrick Steinhardt committed
    • diff: remove unused macros `DIFF_FLAG_*` · 90fc7f53
      In commit 9be638ec (git_diff_generated: abstract generated diffs,
      2016-04-19), the code for generated diffs was moved out of the generic
      "diff.c" and instead into its own module. During that conversion, it was
      forgotten to remove the macros `DIFF_FLAG_IS_SET`, `DIFF_FLAG_ISNT_SET`
      and `DIFF_FLAG_SET`, which are now only used in "diff_generated.c".
      
      Remove those macros now.
      Patrick Steinhardt committed
    • Merge pull request #4422 from pks-t/pks/commit-msg-style · a9b66677
      CONTRIBUTING: add documentation of our commit message style
      Edward Thomson committed
  11. 26 Nov, 2017 1 commit
  12. 25 Nov, 2017 2 commits
  13. 24 Nov, 2017 10 commits
  14. 22 Nov, 2017 1 commit
  15. 19 Nov, 2017 1 commit