]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
libzscanner: fix processing of included file name
authorDaniel Salzman <daniel.salzman@nic.cz>
Thu, 30 May 2019 12:24:30 +0000 (14:24 +0200)
committerDaniel Salzman <daniel.salzman@nic.cz>
Thu, 30 May 2019 12:27:09 +0000 (14:27 +0200)
fixes #646

src/libzscanner/scanner.c.g2
src/libzscanner/scanner.c.t0
src/libzscanner/scanner_body.rl

index 9222baad2b2e28f7f862a761bb78a16eb3287b55..3bf4530b35fbacbc11cccf5341bed917f95f6fe3 100644 (file)
@@ -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.
index 61306f7e855a8b6c438d3146db8d70b9f593860d..9d8588f9169b081b6774da717bbaabf34dbe3941 100644 (file)
@@ -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.
index 4fa547bdd16f3ed0243799831af07204fb441afc..b562c41b877ad29d17885868c36a6858a203d828 100644 (file)
                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.