Skip to content

Commit

Permalink
Fix possible protection stack imbalance
Browse files Browse the repository at this point in the history
Signed-off-by: Stefan Widgren <stefan.widgren@gmail.com>
  • Loading branch information
stewid committed Jul 13, 2017
1 parent 58854bf commit 1393b14
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions src/git2r_diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ SEXP git2r_diff_head_to_index(SEXP repo, SEXP filename)
*/
SEXP git2r_diff_tree_to_wd(SEXP tree, SEXP filename)
{
int err;
int err, nprotect = 0;
git_repository *repository = NULL;
git_diff *diff = NULL;
git_object *obj = NULL;
Expand Down Expand Up @@ -300,6 +300,7 @@ SEXP git2r_diff_tree_to_wd(SEXP tree, SEXP filename)
SEXP s_new = Rf_install("new");

PROTECT(result = NEW_OBJECT(MAKE_CLASS("git_diff")));
nprotect++;
SET_SLOT(result, Rf_install("old"), tree);
SET_SLOT(result, s_new, mkString("workdir"));
err = git2r_diff_format_to_r(diff, result);
Expand All @@ -320,8 +321,8 @@ SEXP git2r_diff_tree_to_wd(SEXP tree, SEXP filename)
if (repository)
git_repository_free(repository);

if (R_NilValue != result)
UNPROTECT(1);
if (nprotect)
UNPROTECT(nprotect);

if (err)
git2r_error(__func__, giterr_last(), NULL, NULL);
Expand All @@ -344,7 +345,7 @@ SEXP git2r_diff_tree_to_wd(SEXP tree, SEXP filename)
*/
SEXP git2r_diff_tree_to_index(SEXP tree, SEXP filename)
{
int err;
int err, nprotect = 0;
git_repository *repository = NULL;
git_diff *diff = NULL;
git_object *obj = NULL;
Expand Down Expand Up @@ -385,6 +386,7 @@ SEXP git2r_diff_tree_to_index(SEXP tree, SEXP filename)
SEXP s_new = Rf_install("new");

PROTECT(result = NEW_OBJECT(MAKE_CLASS("git_diff")));
nprotect++;
SET_SLOT(result, Rf_install("old"), tree);
SET_SLOT(result, s_new, mkString("index"));
err = git2r_diff_format_to_r(diff, result);
Expand All @@ -405,8 +407,8 @@ SEXP git2r_diff_tree_to_index(SEXP tree, SEXP filename)
if (repository)
git_repository_free(repository);

if (R_NilValue != result)
UNPROTECT(1);
if (nprotect)
UNPROTECT(nprotect);

if (err)
git2r_error(__func__, giterr_last(), NULL, NULL);
Expand Down

0 comments on commit 1393b14

Please sign in to comment.