]> git.ipfire.org Git - thirdparty/pdns.git/blobdiff - pdns/bindlexer.l
Merge pull request #7945 from pieterlexis/syncres-CNAME-cache-cleanup
[thirdparty/pdns.git] / pdns / bindlexer.l
index 8003a2740e456045cc9060b84949ae65e3f2b8bf..370dbff331709304762ebcdef161eea65d6d64d2 100644 (file)
@@ -60,25 +60,17 @@ include                 BEGIN(incl);
         include_stack_ln[include_stack_ptr++]=linenumber;
         linenumber=1;
 
-       if(*(yytext+1)=='/') {
-                if (strlen(yytext+1) >= sizeof(filename)) {
-                 fprintf( stderr, "Filename '%s' is too long\n",yytext+1);
-                 exit( 1 );
-               }
-               strcpy(filename,yytext+1);
-       }
-       else {
-               size_t bind_directory_len = strlen(bind_directory);
-               if (bind_directory_len >= sizeof(filename) ||
-                   strlen(yytext+1) + 2 >= sizeof(filename) - bind_directory_len) {
-                 fprintf( stderr, "Filename '%s' is too long\n",yytext+1);
-                 exit( 1 );
-               }
-               strcpy(filename,bind_directory);
-               strcat(filename,"/");
-               strcat(filename,yytext+1);
-       }
-       filename[sizeof(filename)-1]='\0';
+        int ret;
+        if(*(yytext+1)=='/') {
+            ret = snprintf(filename, sizeof(filename), "%s", yytext+1);
+        }
+        else {
+            ret = snprintf(filename, sizeof(filename), "%s/%s", bind_directory, yytext+1);
+        }
+        if (ret == -1 || ret >= sizeof(filename)) {
+            fprintf( stderr, "Filename '%s' is too long\n",yytext+1);
+            exit( 1 );
+        }
 
        if (!(yyin=fopen(filename,"r"))) {
          fprintf( stderr, "Unable to open '%s': %s\n",filename,strerror(errno));