Parcourir la source

[2428] Test and fix error handling in $INCLUDE

Michal 'vorner' Vaner il y a 12 ans
Parent
commit
45e97b8527
2 fichiers modifiés avec 6 ajouts et 4 suppressions
  1. 2 4
      src/lib/dns/master_loader.cc
  2. 4 0
      src/lib/dns/tests/master_loader_unittest.cc

+ 2 - 4
src/lib/dns/master_loader.cc

@@ -81,9 +81,7 @@ public:
         std::string error;
         if (!lexer_.pushSource(filename.c_str(), &error)) {
             if (initialized_) {
-                // $INCLUDE file
-                reportError(lexer_.getSourceName(), lexer_.getSourceLine(),
-                            error);
+                isc_throw(InternalException, error.c_str());
             } else {
                 // Top-level file
                 reportError("", 0, error);
@@ -116,7 +114,7 @@ public:
     void doInclude() {
         // First, get the filename to include
         const MasterToken::StringRegion
-            filename(lexer_.getNextToken(MasterLexer::QSTRING).
+            filename(lexer_.getNextToken(MasterToken::QSTRING).
                      getStringRegion());
 
         // TODO: Handle the case where there's Name after the

+ 4 - 0
src/lib/dns/tests/master_loader_unittest.cc

@@ -282,6 +282,10 @@ struct ErrorCase {
     // Check the unknown directive. The rest looks like ordinary RR,
     // so we see the $ is actually special.
     { "$UNKNOWN 3600    IN  A   192.0.2.1", "Unknown $ directive" },
+    { "$INCLUDE", "Missing include path" },
+    { "$INCLUDE /file/not/found", "Include file not found" },
+    { "$INCLUDE /file/not/found and here goes bunch of garbage",
+        "Include file not found and garbage at the end of line" },
     { NULL, NULL }
 };