summaryrefslogtreecommitdiff
path: root/src/tree.c
diff options
context:
space:
mode:
authorKirill A. Shutemov <kirill@shutemov.name>2011-08-30 23:06:04 +0300
committerKirill A. Shutemov <kirill@shutemov.name>2011-08-30 23:06:04 +0300
commit0b2c4061878bc5b437b1a9e9b5f43c357283980e (patch)
treed65e4af25c301e525040941d24c3a98abcaab547 /src/tree.c
parent2fcf9c82735cec8874d5e12ed18380c77d629706 (diff)
downloadlibgit2-0b2c4061878bc5b437b1a9e9b5f43c357283980e.tar.gz
CMakefile: add -Wstrict-aliasing=2 and fix warnings
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Diffstat (limited to 'src/tree.c')
-rw-r--r--src/tree.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/tree.c b/src/tree.c
index d993d549a..ea2a47b59 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -175,6 +175,7 @@ static int tree_parse_buffer(git_tree *tree, const char *buffer, const char *buf
while (buffer < buffer_end) {
git_tree_entry *entry;
+ long tmp;
entry = git__calloc(1, sizeof(git_tree_entry));
if (entry == NULL) {
@@ -185,8 +186,10 @@ static int tree_parse_buffer(git_tree *tree, const char *buffer, const char *buf
if (git_vector_insert(&tree->entries, entry) < GIT_SUCCESS)
return GIT_ENOMEM;
- if (git__strtol32((long *)&entry->attr, buffer, &buffer, 8) < GIT_SUCCESS)
+ if (git__strtol32(&tmp, buffer, &buffer, 8) < GIT_SUCCESS ||
+ !buffer || tmp > UINT_MAX || tmp < 0)
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse tree. Can't parse attributes");
+ entry->attr = tmp;
if (*buffer++ != ' ') {
error = git__throw(GIT_EOBJCORRUPTED, "Failed to parse tree. Object it corrupted");