From 9d456cf1b0d78f0f566fd68bd6cc09e2e6dcef71 Mon Sep 17 00:00:00 2001
From: Daniel Salzman <daniel.salzman@nic.cz>
Date: Thu, 9 Oct 2014 11:04:29 +0200
Subject: [PATCH] zscanner: remove possible buffer overflow with realpath

---
 src/zscanner/scanner.c.g2 | 4 ++--
 src/zscanner/scanner.c.t0 | 4 ++--
 src/zscanner/scanner.rl   | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/zscanner/scanner.c.g2 b/src/zscanner/scanner.c.g2
index 342a717bd..8072cdf55 100644
--- a/src/zscanner/scanner.c.g2
+++ b/src/zscanner/scanner.c.g2
@@ -73128,8 +73128,8 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 	}
 
 	// Get absolute path of the zone file.
-	if (realpath(file_name, (char*)(s->buffer)) != NULL) {
-		char *full_name = strdup((char*)(s->buffer));
+	char *full_name = realpath(file_name, NULL);
+	if (full_name != NULL) {
 		free(s->path);
 		s->path = strdup(dirname(full_name));
 		free(full_name);
diff --git a/src/zscanner/scanner.c.t0 b/src/zscanner/scanner.c.t0
index e793fb833..684d05d52 100644
--- a/src/zscanner/scanner.c.t0
+++ b/src/zscanner/scanner.c.t0
@@ -7449,8 +7449,8 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 	}
 
 	// Get absolute path of the zone file.
-	if (realpath(file_name, (char*)(s->buffer)) != NULL) {
-		char *full_name = strdup((char*)(s->buffer));
+	char *full_name = realpath(file_name, NULL);
+	if (full_name != NULL) {
 		free(s->path);
 		s->path = strdup(dirname(full_name));
 		free(full_name);
diff --git a/src/zscanner/scanner.rl b/src/zscanner/scanner.rl
index e53e041c0..506854f52 100644
--- a/src/zscanner/scanner.rl
+++ b/src/zscanner/scanner.rl
@@ -296,8 +296,8 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 	}
 
 	// Get absolute path of the zone file.
-	if (realpath(file_name, (char*)(s->buffer)) != NULL) {
-		char *full_name = strdup((char*)(s->buffer));
+	char *full_name = realpath(file_name, NULL);
+	if (full_name != NULL) {
 		free(s->path);
 		s->path = strdup(dirname(full_name));
 		free(full_name);
-- 
GitLab