[libgit2-glib] Fix crash when signature is used after the commit is unreffed.



commit 150990f2d5e7c4e01c7b695f56c022a50b27aa3f
Author: Jeongsu Kim <jeongsu bmp pe kr>
Date:   Tue Feb 23 10:49:45 2016 +0100

    Fix crash when signature is used after the commit is unreffed.
    
    The signature might be kept after the commit is unreffed so we
    need to duplicate it before wrapping it.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=762427

 libgit2-glib/ggit-commit.c |   19 +++++++++++--------
 1 files changed, 11 insertions(+), 8 deletions(-)
---
diff --git a/libgit2-glib/ggit-commit.c b/libgit2-glib/ggit-commit.c
index 5984ac9..a511423 100644
--- a/libgit2-glib/ggit-commit.c
+++ b/libgit2-glib/ggit-commit.c
@@ -224,16 +224,18 @@ GgitSignature *
 ggit_commit_get_committer (GgitCommit *commit)
 {
        git_commit *c;
-       const git_signature *signature;
+       const git_signature *committer;
+       git_signature *signature;
 
        g_return_val_if_fail (GGIT_IS_COMMIT (commit), NULL);
 
        c = _ggit_native_get (commit);
-       signature = git_commit_committer (c);
+       committer = git_commit_committer (c);
+       git_signature_dup (&signature, committer);
 
-       return _ggit_signature_wrap ((git_signature *)signature,
+       return _ggit_signature_wrap (signature,
                                     ggit_commit_get_message_encoding (commit),
-                                    FALSE);
+                                    TRUE);
 }
 
 /**
@@ -249,16 +251,17 @@ GgitSignature *
 ggit_commit_get_author (GgitCommit *commit)
 {
        git_commit *c;
-       const git_signature *signature;
+       const git_signature *author;
+       git_signature *signature;
 
        g_return_val_if_fail (GGIT_IS_COMMIT (commit), NULL);
 
        c = _ggit_native_get (commit);
-       signature = git_commit_author (c);
+       author = git_commit_author (c);
 
-       return _ggit_signature_wrap ((git_signature *)signature,
+       return _ggit_signature_wrap (signature,
                                     ggit_commit_get_message_encoding (commit),
-                                    FALSE);
+                                    TRUE);
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]