Commit 0d280ea457c8ee8809062266fa365c440d35ee6b

Carlos Martín Nieto 2011-04-06T16:31:06

config: use snprintf instead of sprintf Due to the preconditions, there should never be an error, but it pays to be paranoid. Signed-off-by: Carlos Martín Nieto <cmn@elego.de>

diff --git a/src/config.c b/src/config.c
index 0704f07..41db3c5 100644
--- a/src/config.c
+++ b/src/config.c
@@ -648,7 +648,7 @@ static char *build_varname(const char *section, const char *name)
 static int parse_section_header_ext(const char *line, const char *base_name, char **section_name)
 {
 	int buf_len, total_len, pos, rpos;
-	int c;
+	int c, ret;
 	char *subsection, *first_quote, *last_quote;
 	int error = GIT_SUCCESS;
 	int quote_marks;
@@ -713,7 +713,16 @@ static int parse_section_header_ext(const char *line, const char *base_name, cha
 		goto out;
 	}
 
-	sprintf(*section_name, "%s %s", base_name, subsection);
+	ret = snprintf(*section_name, total_len, "%s %s", base_name, subsection);
+	if (ret >= total_len) {
+		/* If this fails, we've checked the length wrong */
+		error = GIT_ERROR;
+		goto out;
+	} else if (ret < 0) {
+		error = GIT_EOSERR;
+		goto out;
+	}
+
 	git__strntolower(*section_name, strchr(*section_name, ' ') - *section_name);
 
  out: