Check if the non-escaped chars are spaces or printable in "C" locale to match libFuzzer's dictionary parsing. (#178)

diff --git a/fuzzing/tools/dict_validation.py b/fuzzing/tools/dict_validation.py
index d47bbc2..ff304a4 100644
--- a/fuzzing/tools/dict_validation.py
+++ b/fuzzing/tools/dict_validation.py
@@ -22,8 +22,8 @@
 _DICTIONARY_LINE_RE = re.compile(
     r'''[^"]*  # Skip an arbitrary prefix (not used by libFuzzer).
         "      # Must be enclosed in quotes.
-        (
-         [^\\]    # One or more non-escape characters...
+        (         # A space or printable character in "C" locale except `\`...
+         ((?!\\)[\f\r\t\v\x20-\x7e])
         |
          \\(      # ...or an escape sequence...
             [\\\"]  # ...consisting of either `\` or `"`...
diff --git a/fuzzing/tools/dict_validation_test.py b/fuzzing/tools/dict_validation_test.py
index 322520d..513f803 100644
--- a/fuzzing/tools/dict_validation_test.py
+++ b/fuzzing/tools/dict_validation_test.py
@@ -25,10 +25,16 @@
 
     def test_plain_entries(self):
         self.assertTrue(validate_line('kw1="blah"'))
-        self.assertTrue(validate_line('":path"'))
-        self.assertTrue(validate_line('"keep-alive"'))
-        self.assertTrue(validate_line('"te"'))
-        self.assertTrue(validate_line('"ab""'))
+        self.assertTrue(validate_line('"0123456789"'))
+        self.assertTrue(validate_line('"abcdefghijklmnopqrstuvwxyz"'))
+        self.assertTrue(validate_line('"ABCDEFGHIJKLMNOPQRSTUVWXYZ"'))
+        self.assertTrue(validate_line('"!"#$%&\'()*+,-./:;<=>?@[]^_`{|}~ "'))
+        self.assertTrue(validate_line('"\t\r\f\v"'))
+
+    def test_bad_chars(self):
+        self.assertFalse(validate_line('"\x07"'))
+        self.assertFalse(validate_line('"Ā"'))
+        self.assertFalse(validate_line('"😀"'))
 
     def test_escaped_words(self):
         self.assertTrue(validate_line('kw2="\\"ac\\\\dc\\""'))