Fixing up for #define instead of typedef in secure allocators
diff --git a/src/jsontestrunner/main.cpp b/src/jsontestrunner/main.cpp
index a0c88bd..60f7e32 100644
--- a/src/jsontestrunner/main.cpp
+++ b/src/jsontestrunner/main.cpp
@@ -17,14 +17,14 @@
 
 struct Options
 {
-  std::string path;
+  JSONCPP_STRING path;
   Json::Features features;
   bool parseOnly;
-  typedef std::string (*writeFuncType)(Json::Value const&);
+  typedef JSONCPP_STRING (*writeFuncType)(Json::Value const&);
   writeFuncType write;
 };
 
-static std::string normalizeFloatingPointStr(double value) {
+static JSONCPP_STRING normalizeFloatingPointStr(double value) {
   char buffer[32];
 #if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__)
   sprintf_s(buffer, sizeof(buffer), "%.16g", value);
@@ -32,18 +32,21 @@
   snprintf(buffer, sizeof(buffer), "%.16g", value);
 #endif
   buffer[sizeof(buffer) - 1] = 0;
-  std::string s(buffer);
-  std::string::size_type index = s.find_last_of("eE");
-  if (index != std::string::npos) {
-    std::string::size_type hasSign =
+  JSONCPP_STRING s(buffer);
+#if JSON_USE_SECURE_MEMORY
+  memset(&buffer, 0, sizeof(buffer));
+#endif
+  JSONCPP_STRING::size_type index = s.find_last_of("eE");
+  if (index != JSONCPP_STRING::npos) {
+    JSONCPP_STRING::size_type hasSign =
         (s[index + 1] == '+' || s[index + 1] == '-') ? 1 : 0;
-    std::string::size_type exponentStartIndex = index + 1 + hasSign;
-    std::string normalized = s.substr(0, exponentStartIndex);
-    std::string::size_type indexDigit =
+    JSONCPP_STRING::size_type exponentStartIndex = index + 1 + hasSign;
+    JSONCPP_STRING normalized = s.substr(0, exponentStartIndex);
+    JSONCPP_STRING::size_type indexDigit =
         s.find_first_not_of('0', exponentStartIndex);
-    std::string exponent = "0";
+    JSONCPP_STRING exponent = "0";
     if (indexDigit !=
-        std::string::npos) // There is an exponent different from 0
+        JSONCPP_STRING::npos) // There is an exponent different from 0
     {
       exponent = s.substr(indexDigit);
     }
@@ -52,26 +55,29 @@
   return s;
 }
 
-static std::string readInputTestFile(const char* path) {
+static JSONCPP_STRING readInputTestFile(const char* path) {
   FILE* file = fopen(path, "rb");
   if (!file)
-    return std::string("");
+    return JSONCPP_STRING("");
   fseek(file, 0, SEEK_END);
   long const size = ftell(file);
   unsigned long const usize = static_cast<unsigned long const>(size);
   fseek(file, 0, SEEK_SET);
-  std::string text;
+  JSONCPP_STRING text;
   char* buffer = new char[size + 1];
   buffer[size] = 0;
   if (fread(buffer, 1, usize, file) == usize)
     text = buffer;
   fclose(file);
+#if JSON_USE_SECURE_MEMORY
+  memset(buffer, 0, static_cast<size_t>(size + 1));
+#endif
   delete[] buffer;
   return text;
 }
 
 static void
-printValueTree(FILE* fout, Json::Value& value, const std::string& path = ".") {
+printValueTree(FILE* fout, Json::Value& value, const JSONCPP_STRING& path = ".") {
   if (value.hasComment(Json::commentBefore)) {
     fprintf(fout, "%s\n", value.getComment(Json::commentBefore).c_str());
   }
@@ -120,11 +126,11 @@
     fprintf(fout, "%s={}\n", path.c_str());
     Json::Value::Members members(value.getMemberNames());
     std::sort(members.begin(), members.end());
-    std::string suffix = *(path.end() - 1) == '.' ? "" : ".";
+    JSONCPP_STRING suffix = *(path.end() - 1) == '.' ? "" : ".";
     for (Json::Value::Members::iterator it = members.begin();
          it != members.end();
          ++it) {
-      const std::string& name = *it;
+      const JSONCPP_STRING name = *it;
       printValueTree(fout, value[name], path + suffix + name);
     }
   } break;
@@ -137,9 +143,9 @@
   }
 }
 
-static int parseAndSaveValueTree(const std::string& input,
-                                 const std::string& actual,
-                                 const std::string& kind,
+static int parseAndSaveValueTree(const JSONCPP_STRING& input,
+                                 const JSONCPP_STRING& actual,
+                                 const JSONCPP_STRING& kind,
                                  const Json::Features& features,
                                  bool parseOnly,
                                  Json::Value* root)
@@ -163,18 +169,18 @@
   }
   return 0;
 }
-// static std::string useFastWriter(Json::Value const& root) {
+// static JSONCPP_STRING useFastWriter(Json::Value const& root) {
 //   Json::FastWriter writer;
 //   writer.enableYAMLCompatibility();
 //   return writer.write(root);
 // }
-static std::string useStyledWriter(
+static JSONCPP_STRING useStyledWriter(
     Json::Value const& root)
 {
   Json::StyledWriter writer;
   return writer.write(root);
 }
-static std::string useStyledStreamWriter(
+static JSONCPP_STRING useStyledStreamWriter(
     Json::Value const& root)
 {
   Json::StyledStreamWriter writer;
@@ -182,17 +188,17 @@
   writer.write(sout, root);
   return sout.str();
 }
-static std::string useBuiltStyledStreamWriter(
+static JSONCPP_STRING useBuiltStyledStreamWriter(
     Json::Value const& root)
 {
   Json::StreamWriterBuilder builder;
   return Json::writeString(builder, root);
 }
 static int rewriteValueTree(
-    const std::string& rewritePath,
+    const JSONCPP_STRING& rewritePath,
     const Json::Value& root,
     Options::writeFuncType write,
-    std::string* rewrite)
+    JSONCPP_STRING* rewrite)
 {
   *rewrite = write(root);
   FILE* fout = fopen(rewritePath.c_str(), "wt");
@@ -205,13 +211,13 @@
   return 0;
 }
 
-static std::string removeSuffix(const std::string& path,
-                                const std::string& extension) {
+static JSONCPP_STRING removeSuffix(const JSONCPP_STRING& path,
+                                const JSONCPP_STRING& extension) {
   if (extension.length() >= path.length())
-    return std::string("");
-  std::string suffix = path.substr(path.length() - extension.length());
+    return JSONCPP_STRING("");
+  JSONCPP_STRING suffix = path.substr(path.length() - extension.length());
   if (suffix != extension)
-    return std::string("");
+    return JSONCPP_STRING("");
   return path.substr(0, path.length() - extension.length());
 }
 
@@ -238,18 +244,18 @@
     return printUsage(argv);
   }
   int index = 1;
-  if (std::string(argv[index]) == "--json-checker") {
+  if (JSONCPP_STRING(argv[index]) == "--json-checker") {
     opts->features = Json::Features::strictMode();
     opts->parseOnly = true;
     ++index;
   }
-  if (std::string(argv[index]) == "--json-config") {
+  if (JSONCPP_STRING(argv[index]) == "--json-config") {
     printConfig();
     return 3;
   }
-  if (std::string(argv[index]) == "--json-writer") {
+  if (JSONCPP_STRING(argv[index]) == "--json-writer") {
     ++index;
-    std::string const writerName(argv[index++]);
+    JSONCPP_STRING const writerName(argv[index++]);
     if (writerName == "StyledWriter") {
       opts->write = &useStyledWriter;
     } else if (writerName == "StyledStreamWriter") {
@@ -271,22 +277,22 @@
 {
   int exitCode = 0;
 
-  std::string input = readInputTestFile(opts.path.c_str());
+  JSONCPP_STRING input = readInputTestFile(opts.path.c_str());
   if (input.empty()) {
     printf("Failed to read input or empty input: %s\n", opts.path.c_str());
     return 3;
   }
 
-  std::string basePath = removeSuffix(opts.path, ".json");
+  JSONCPP_STRING basePath = removeSuffix(opts.path, ".json");
   if (!opts.parseOnly && basePath.empty()) {
     printf("Bad input path. Path does not end with '.expected':\n%s\n",
             opts.path.c_str());
     return 3;
   }
 
-  std::string const actualPath = basePath + ".actual";
-  std::string const rewritePath = basePath + ".rewrite";
-  std::string const rewriteActualPath = basePath + ".actual-rewrite";
+  JSONCPP_STRING const actualPath = basePath + ".actual";
+  JSONCPP_STRING const rewritePath = basePath + ".rewrite";
+  JSONCPP_STRING const rewriteActualPath = basePath + ".actual-rewrite";
 
   Json::Value root;
   exitCode = parseAndSaveValueTree(
@@ -295,7 +301,7 @@
   if (exitCode || opts.parseOnly) {
     return exitCode;
   }
-  std::string rewrite;
+  JSONCPP_STRING rewrite;
   exitCode = rewriteValueTree(rewritePath, root, opts.write, &rewrite);
   if (exitCode) {
     return exitCode;