libgit2/libgit2 — pull request #509 by arrbee (2011-12-08 07:28:50+00:00)
Title: Use dynamic allocation for paths instead of stack-based buffers

In order to reduce memory usage and remove potential buffer overflows, this patch converts virtually all of the places that allocate GIT_PATH_MAX buffers on the stack for manipulating paths to use git_buf objects instead. The patch is pretty careful not to touch the public API for libgit2, so there are a few places that still use GIT_PATH_MAX.

This extends and changes some details of the git_buf implementation to add a couple of extra functions and to make error handling easier.

This includes significant alterations to all the path.c functions and several of the fileops.c ones, too. Also, there are a number of new functions that parallel existing ones but use a git_buf instead of a stack-based buffer (such as `git_config_find_global_r` that exists alongside `git_config_find_global`).

This also modifies the win32 version of `p_realpath` to allocate whatever buffer size is needed to accommodate the realpath instead of hardcoding a GIT_PATH_MAX limit, but that change needs to be tested still.