From: Edward Thomson Date: Tue, 23 Feb 2016 04:46:50 +0000 (-0500) Subject: git_libgit2_opts: introduce `GIT_OPT_ENABLE_STRICT_OBJECT_CREATION` X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=22a19f5b5795153b4c77c75adfae790c3b919be4;p=libgit2.git git_libgit2_opts: introduce `GIT_OPT_ENABLE_STRICT_OBJECT_CREATION` --- diff --git a/include/git2/common.h b/include/git2/common.h index c26030840..4f43185f8 100644 --- a/include/git2/common.h +++ b/include/git2/common.h @@ -147,6 +147,7 @@ typedef enum { GIT_OPT_SET_TEMPLATE_PATH, GIT_OPT_SET_SSL_CERT_LOCATIONS, GIT_OPT_SET_USER_AGENT, + GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, } git_libgit2_opt_t; /** @@ -251,6 +252,14 @@ typedef enum { * > - `user_agent` is the value that will be delivered as the * > User-Agent header on HTTP requests. * + * * opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, int enabled) + * + * > Enable strict input validation when creating new objects + * > to ensure that all inputs to the new objects are valid. For + * > example, when this is enabled, the parent(s) and tree inputs + * > will be validated when creating a new commit. This defaults + * > to disabled. + * * @param option Option key * @param ... value to set the option * @return 0 on success, <0 on failure diff --git a/src/object.c b/src/object.c index b0a8199bc..7f7de9fee 100644 --- a/src/object.c +++ b/src/object.c @@ -14,6 +14,8 @@ #include "blob.h" #include "tag.h" +bool git_object__strict_input_validation = false; + typedef struct { const char *str; /* type name string */ size_t size; /* size in bytes of the object structure */ diff --git a/src/object.h b/src/object.h index d187c55b7..358279a3d 100644 --- a/src/object.h +++ b/src/object.h @@ -7,6 +7,8 @@ #ifndef INCLUDE_object_h__ #define INCLUDE_object_h__ +extern bool git_object__strict_input_validation; + /** Base git object for inheritance */ struct git_object { git_cached_obj cached; diff --git a/src/settings.c b/src/settings.c index d7341abe8..88602bad0 100644 --- a/src/settings.c +++ b/src/settings.c @@ -14,6 +14,7 @@ #include "sysdir.h" #include "cache.h" #include "global.h" +#include "object.h" void git_libgit2_version(int *major, int *minor, int *rev) { @@ -181,6 +182,11 @@ int git_libgit2_opts(int key, ...) } break; + + case GIT_OPT_ENABLE_STRICT_OBJECT_CREATION: + git_object__strict_input_validation = (va_arg(ap, int) != 0); + break; + default: giterr_set(GITERR_INVALID, "invalid option key"); error = -1;