Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
f2dddf52
Commit
f2dddf52
authored
Feb 28, 2016
by
Edward Thomson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
turn on strict object validation by default
parent
4afe536b
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
34 additions
and
29 deletions
+34
-29
CHANGELOG.md
+5
-0
src/object.c
+1
-1
tests/commit/write.c
+4
-4
tests/index/add.c
+18
-18
tests/object/tree/write.c
+6
-6
No files found.
CHANGELOG.md
View file @
f2dddf52
...
...
@@ -29,6 +29,11 @@ v0.23 + 1
*
Rebases can now be performed purely in-memory, without touching the
repository's workdir.
*
When adding objects to the index, or when creating new tree or commit
objects, the inputs are validated to ensure that the dependent objects
exist and are of the correct type. This object validation can be
disabled with the GIT_OPT_ENABLE_STRICT_OBJECT_CREATION option.
### API additions
*
`git_config_lock()`
has been added, which allow for
...
...
src/object.c
View file @
f2dddf52
...
...
@@ -14,7 +14,7 @@
#include "blob.h"
#include "tag.h"
bool
git_object__strict_input_validation
=
fals
e
;
bool
git_object__strict_input_validation
=
tru
e
;
typedef
struct
{
const
char
*
str
;
/* type name string */
...
...
tests/commit/write.c
View file @
f2dddf52
...
...
@@ -38,7 +38,7 @@ void test_commit_write__cleanup(void)
cl_git_sandbox_cleanup
();
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
0
));
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
1
));
}
...
...
@@ -196,10 +196,12 @@ static int create_commit_from_ids(
return
ret
;
}
void
test_commit_write__
doesnt_validate_objects_by_default
(
void
)
void
test_commit_write__
can_write_invalid_objects
(
void
)
{
git_oid
expected_id
,
tree_id
,
parent_id
,
commit_id
;
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
0
));
/* this is a valid tree and parent */
git_oid_fromstr
(
&
tree_id
,
tree_id_str
);
git_oid_fromstr
(
&
parent_id
,
parent_id_str
);
...
...
@@ -237,8 +239,6 @@ void test_commit_write__can_validate_objects(void)
{
git_oid
tree_id
,
parent_id
,
commit_id
;
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
1
));
/* this is a valid tree and parent */
git_oid_fromstr
(
&
tree_id
,
tree_id_str
);
git_oid_fromstr
(
&
parent_id
,
parent_id_str
);
...
...
tests/index/add.c
View file @
f2dddf52
...
...
@@ -20,7 +20,7 @@ void test_index_add__cleanup(void)
cl_git_sandbox_cleanup
();
g_repo
=
NULL
;
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
0
));
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
1
));
}
static
void
test_add_entry
(
...
...
@@ -42,7 +42,7 @@ static void test_add_entry(
void
test_index_add__invalid_entries_succeeds_by_default
(
void
)
{
/*
* Ensure that there is
no validation on
ids by default
* Ensure that there is
validation on object
ids by default
*/
/* ensure that we can add some actually good entries */
...
...
@@ -51,34 +51,34 @@ void test_index_add__invalid_entries_succeeds_by_default(void)
test_add_entry
(
true
,
valid_blob_id
,
GIT_FILEMODE_LINK
);
/* test that we fail to add some invalid (missing) blobs and trees */
test_add_entry
(
tru
e
,
invalid_id
,
GIT_FILEMODE_BLOB
);
test_add_entry
(
tru
e
,
invalid_id
,
GIT_FILEMODE_BLOB_EXECUTABLE
);
test_add_entry
(
tru
e
,
invalid_id
,
GIT_FILEMODE_LINK
);
test_add_entry
(
fals
e
,
invalid_id
,
GIT_FILEMODE_BLOB
);
test_add_entry
(
fals
e
,
invalid_id
,
GIT_FILEMODE_BLOB_EXECUTABLE
);
test_add_entry
(
fals
e
,
invalid_id
,
GIT_FILEMODE_LINK
);
/* test that we validate the types of objects */
test_add_entry
(
tru
e
,
valid_commit_id
,
GIT_FILEMODE_BLOB
);
test_add_entry
(
tru
e
,
valid_tree_id
,
GIT_FILEMODE_BLOB_EXECUTABLE
);
test_add_entry
(
tru
e
,
valid_commit_id
,
GIT_FILEMODE_LINK
);
test_add_entry
(
fals
e
,
valid_commit_id
,
GIT_FILEMODE_BLOB
);
test_add_entry
(
fals
e
,
valid_tree_id
,
GIT_FILEMODE_BLOB_EXECUTABLE
);
test_add_entry
(
fals
e
,
valid_commit_id
,
GIT_FILEMODE_LINK
);
/*
* Ensure that
strict object references will fail the `index_add`
* Ensure that
there we can disable validation
*/
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
1
));
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
0
));
/* ensure that we can add some actually good entries */
test_add_entry
(
true
,
valid_blob_id
,
GIT_FILEMODE_BLOB
);
test_add_entry
(
true
,
valid_blob_id
,
GIT_FILEMODE_BLOB_EXECUTABLE
);
test_add_entry
(
true
,
valid_blob_id
,
GIT_FILEMODE_LINK
);
/* test that we
fail to
add some invalid (missing) blobs and trees */
test_add_entry
(
fals
e
,
invalid_id
,
GIT_FILEMODE_BLOB
);
test_add_entry
(
fals
e
,
invalid_id
,
GIT_FILEMODE_BLOB_EXECUTABLE
);
test_add_entry
(
fals
e
,
invalid_id
,
GIT_FILEMODE_LINK
);
/* test that we
can now
add some invalid (missing) blobs and trees */
test_add_entry
(
tru
e
,
invalid_id
,
GIT_FILEMODE_BLOB
);
test_add_entry
(
tru
e
,
invalid_id
,
GIT_FILEMODE_BLOB_EXECUTABLE
);
test_add_entry
(
tru
e
,
invalid_id
,
GIT_FILEMODE_LINK
);
/* test that we validate the types of objects */
test_add_entry
(
fals
e
,
valid_commit_id
,
GIT_FILEMODE_BLOB
);
test_add_entry
(
fals
e
,
valid_tree_id
,
GIT_FILEMODE_BLOB_EXECUTABLE
);
test_add_entry
(
fals
e
,
valid_commit_id
,
GIT_FILEMODE_LINK
);
/* test that we
do not
validate the types of objects */
test_add_entry
(
tru
e
,
valid_commit_id
,
GIT_FILEMODE_BLOB
);
test_add_entry
(
tru
e
,
valid_tree_id
,
GIT_FILEMODE_BLOB_EXECUTABLE
);
test_add_entry
(
tru
e
,
valid_commit_id
,
GIT_FILEMODE_LINK
);
}
tests/object/tree/write.c
View file @
f2dddf52
...
...
@@ -19,7 +19,7 @@ void test_object_tree_write__cleanup(void)
{
cl_git_sandbox_cleanup
();
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
0
));
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
1
));
}
void
test_object_tree_write__from_memory
(
void
)
...
...
@@ -492,11 +492,11 @@ static void test_invalid_objects(bool should_allow_invalid)
void
test_object_tree_write__object_validity
(
void
)
{
/* Ensure that we can add invalid objects by default */
test_invalid_objects
(
true
);
/* Ensure that we can turn on validation */
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
1
));
/* Ensure that we cannot add invalid objects by default */
test_invalid_objects
(
false
);
/* Ensure that we can turn off validation */
cl_git_pass
(
git_libgit2_opts
(
GIT_OPT_ENABLE_STRICT_OBJECT_CREATION
,
0
));
test_invalid_objects
(
true
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment