Commit c2f17bda074b2e5718456aed75fedd2196c8dc94

Michael Procter 2015-07-23T13:17:08

Ensure static oom error message not detached Error messages that are detached are assumed to be dynamically allocated. Passing a pointer to the static oom error message can cause an attempt to free the static buffer later. This change checks if the oom error message is about to be detached and detaches a copy instead.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
diff --git a/src/errors.c b/src/errors.c
index 7a26005..979602a 100644
--- a/src/errors.c
+++ b/src/errors.c
@@ -125,10 +125,14 @@ int giterr_detach(git_error *cpy)
 	if (!error)
 		return -1;
 
-	cpy->message = error->message;
+	if (error == &g_git_oom_error) {
+		cpy->message = git__strdup(error->message);
+	} else {
+		cpy->message = error->message;
+		error->message = NULL;
+	}
 	cpy->klass = error->klass;
 
-	error->message = NULL;
 	giterr_clear();
 
 	return 0;