Browse Source

[1964] use assert() instead of throwing exception in checkExcessPlaceholders.

unfortunatelly, we cannot throw here because it's called from the Formatter
destructor.  death tests now work for environments where it previously failed.
JINMEI Tatuya 13 years ago
parent
commit
18675a2d6a
2 changed files with 11 additions and 6 deletions
  1. 7 4
      src/lib/log/log_formatter.cc
  2. 4 2
      src/lib/log/tests/log_formatter_unittest.cc

+ 7 - 4
src/lib/log/log_formatter.cc

@@ -15,6 +15,8 @@
 #include "config.h"
 #include <log/log_formatter.h>
 
+#include <cassert>
+
 using namespace std;
 using namespace boost;
 
@@ -52,11 +54,12 @@ checkExcessPlaceholders(string* message, unsigned int placeholder) {
     const string mark("%" + lexical_cast<string>(placeholder));
     const size_t pos(message->find(mark));
     if (pos != string::npos) {
+        // Excess placeholders were found.  If we enable the harsh check,
+        // abort it.  Note: ideally we'd like to throw MismatchedPlaceholders,
+        // but we can't at least for now because this function is called from
+        // the Formatter's destructor.
 #ifdef ENABLE_LOGGER_CHECKS
-        // Excess placeholders were found, so throw an exception
-        isc_throw(MismatchedPlaceholders,
-		  "Excess logger placeholders still exist in message: "
-                  << *message);
+        assert("Excess logger placeholders still exist in message" == NULL);
 #else
         message->append(" @@Excess logger placeholders still exist@@");
 #endif /* ENABLE_LOGGER_CHECKS */

+ 4 - 2
src/lib/log/tests/log_formatter_unittest.cc

@@ -106,12 +106,14 @@ TEST_F(FormatterTest, multiArg) {
 TEST_F(FormatterTest, mismatchedPlaceholders) {
     EXPECT_DEATH({
         isc::util::unittests::dontCreateCoreDumps();
-        Formatter(isc::log::INFO, s("Missing the first %2"), this).arg("missing").arg("argument");
+        Formatter(isc::log::INFO, s("Missing the first %2"), this).
+            arg("missing").arg("argument");
     }, ".*");
 
     EXPECT_DEATH({
         isc::util::unittests::dontCreateCoreDumps();
-        Formatter(isc::log::INFO, s("Too many arguments in %1 %2"), this).arg("only one");
+        Formatter(isc::log::INFO, s("Too many arguments in %1 %2"), this).
+            arg("only one");
     }, ".*");
 }
 #endif /* EXPECT_DEATH */