From: Daniel Salzman Date: Thu, 30 May 2019 12:24:30 +0000 (+0200) Subject: libzscanner: fix processing of included file name X-Git-Tag: v2.9.0~256 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b07f27d99ee4cfae2b39dfd516b99010f0270341;p=thirdparty%2Fknot-dns.git libzscanner: fix processing of included file name fixes #646 --- diff --git a/src/libzscanner/scanner.c.g2 b/src/libzscanner/scanner.c.g2 index 9222baad2b..3bf4530b35 100644 --- a/src/libzscanner/scanner.c.g2 +++ b/src/libzscanner/scanner.c.g2 @@ -41947,11 +41947,11 @@ tr1120: if (s->include_filename[0] != '/') { int ret = snprintf((char *)(s->buffer), sizeof(s->buffer), "%s/%s", s->path, s->include_filename); - if (ret <= 0 || ret > sizeof(s->buffer)) { + if (ret <= 0 || ret >= sizeof(s->buffer)) { ERR(ZS_BAD_INCLUDE_FILENAME); p--; {goto st299;} } - memcpy(s->include_filename, s->buffer, ret); + memcpy(s->include_filename, s->buffer, ret + 1); } // Origin conversion from wire to text form in \DDD notation. @@ -42014,11 +42014,11 @@ tr1130: if (s->include_filename[0] != '/') { int ret = snprintf((char *)(s->buffer), sizeof(s->buffer), "%s/%s", s->path, s->include_filename); - if (ret <= 0 || ret > sizeof(s->buffer)) { + if (ret <= 0 || ret >= sizeof(s->buffer)) { ERR(ZS_BAD_INCLUDE_FILENAME); p--; {goto st299;} } - memcpy(s->include_filename, s->buffer, ret); + memcpy(s->include_filename, s->buffer, ret + 1); } // Origin conversion from wire to text form in \DDD notation. @@ -42092,11 +42092,11 @@ tr1142: if (s->include_filename[0] != '/') { int ret = snprintf((char *)(s->buffer), sizeof(s->buffer), "%s/%s", s->path, s->include_filename); - if (ret <= 0 || ret > sizeof(s->buffer)) { + if (ret <= 0 || ret >= sizeof(s->buffer)) { ERR(ZS_BAD_INCLUDE_FILENAME); p--; {goto st299;} } - memcpy(s->include_filename, s->buffer, ret); + memcpy(s->include_filename, s->buffer, ret + 1); } // Origin conversion from wire to text form in \DDD notation. @@ -42172,11 +42172,11 @@ tr1148: if (s->include_filename[0] != '/') { int ret = snprintf((char *)(s->buffer), sizeof(s->buffer), "%s/%s", s->path, s->include_filename); - if (ret <= 0 || ret > sizeof(s->buffer)) { + if (ret <= 0 || ret >= sizeof(s->buffer)) { ERR(ZS_BAD_INCLUDE_FILENAME); p--; {goto st299;} } - memcpy(s->include_filename, s->buffer, ret); + memcpy(s->include_filename, s->buffer, ret + 1); } // Origin conversion from wire to text form in \DDD notation. @@ -42512,11 +42512,11 @@ tr1157: if (s->include_filename[0] != '/') { int ret = snprintf((char *)(s->buffer), sizeof(s->buffer), "%s/%s", s->path, s->include_filename); - if (ret <= 0 || ret > sizeof(s->buffer)) { + if (ret <= 0 || ret >= sizeof(s->buffer)) { ERR(ZS_BAD_INCLUDE_FILENAME); p--; {goto st299;} } - memcpy(s->include_filename, s->buffer, ret); + memcpy(s->include_filename, s->buffer, ret + 1); } // Origin conversion from wire to text form in \DDD notation. diff --git a/src/libzscanner/scanner.c.t0 b/src/libzscanner/scanner.c.t0 index 61306f7e85..9d8588f916 100644 --- a/src/libzscanner/scanner.c.t0 +++ b/src/libzscanner/scanner.c.t0 @@ -7053,11 +7053,11 @@ _match: if (s->include_filename[0] != '/') { int ret = snprintf((char *)(s->buffer), sizeof(s->buffer), "%s/%s", s->path, s->include_filename); - if (ret <= 0 || ret > sizeof(s->buffer)) { + if (ret <= 0 || ret >= sizeof(s->buffer)) { ERR(ZS_BAD_INCLUDE_FILENAME); p--; {cs = 299;goto _again;} } - memcpy(s->include_filename, s->buffer, ret); + memcpy(s->include_filename, s->buffer, ret + 1); } // Origin conversion from wire to text form in \DDD notation. diff --git a/src/libzscanner/scanner_body.rl b/src/libzscanner/scanner_body.rl index 4fa547bdd1..b562c41b87 100644 --- a/src/libzscanner/scanner_body.rl +++ b/src/libzscanner/scanner_body.rl @@ -733,11 +733,11 @@ if (s->include_filename[0] != '/') { int ret = snprintf((char *)(s->buffer), sizeof(s->buffer), "%s/%s", s->path, s->include_filename); - if (ret <= 0 || ret > sizeof(s->buffer)) { + if (ret <= 0 || ret >= sizeof(s->buffer)) { ERR(ZS_BAD_INCLUDE_FILENAME); fhold; fgoto err_line; } - memcpy(s->include_filename, s->buffer, ret); + memcpy(s->include_filename, s->buffer, ret + 1); } // Origin conversion from wire to text form in \DDD notation.