Usefulcat master (#98)

* minor bug fix: use free() instead of delete[] to free memory allocated by strdup()

* fix for uninitialized variable problem found by valgrind

* disable assertions for 'optimize' build

* removed -g option that was inadvertently added to CCFLAGS

* ignore generated files
diff --git a/.gitignore b/.gitignore
index e8352ae..5805b34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,7 @@
 *.opensdf
 *.sdf
 *.user
+*.a
+*.so
+*.so.*
+run_tests
diff --git a/SConstruct b/SConstruct
index c4de4b4..cebd7e0 100644
--- a/SConstruct
+++ b/SConstruct
@@ -20,9 +20,9 @@
 
 CCFLAGS = []
 if int(debug):
-  CCFLAGS.append(ARGUMENTS.get('CXXFLAGS', '-g -Wall -Wshadow -Werror'))
+  CCFLAGS.append(ARGUMENTS.get('CXXFLAGS', '-g -Wall -Wshadow -Werror -UNDEBUG'))
 if int(optimize):
-  CCFLAGS.append(ARGUMENTS.get('CXXFLAGS', '-O3'))
+  CCFLAGS.append(ARGUMENTS.get('CXXFLAGS', '-O3 -DNDEBUG=1'))
 
 env.Append(CCFLAGS = " ".join(CCFLAGS))
 
diff --git a/double-conversion/.gitignore b/double-conversion/.gitignore
new file mode 100644
index 0000000..1edeb79
--- /dev/null
+++ b/double-conversion/.gitignore
@@ -0,0 +1 @@
+*.os
diff --git a/double-conversion/double-conversion.cc b/double-conversion/double-conversion.cc
index d5a04f6..163d41b 100644
--- a/double-conversion/double-conversion.cc
+++ b/double-conversion/double-conversion.cc
@@ -250,6 +250,12 @@
   const int kDecimalRepCapacity = kMaxExponentialDigits + 2;
   ASSERT(kDecimalRepCapacity > kBase10MaximalLength);
   char decimal_rep[kDecimalRepCapacity];
+#ifndef NDEBUG
+  // Problem: there is an assert in StringBuilder::AddSubstring() that
+  // will pass this buffer to strlen(), and this buffer is not generally
+  // null-terminated.
+  memset(decimal_rep, 0, sizeof(decimal_rep));
+#endif
   int decimal_rep_length;
 
   if (requested_digits == -1) {
diff --git a/test/cctest/cctest.cc b/test/cctest/cctest.cc
index 6d85bfd..b6e82b4 100644
--- a/test/cctest/cctest.cc
+++ b/test/cctest/cctest.cc
@@ -115,7 +115,7 @@
           test = test->prev();
         }
       }
-      delete[] arg_copy;
+      free(arg_copy);
     }
   }
   if (print_run_count && tests_run != 1)