diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,11 @@
+## 0.8.23.3
+
+* Avoid over-escaping `*` [#113](https://github.com/snoyberg/yaml/issues/113)
+
+## 0.8.23.2
+
+* Update libyaml [#110](https://github.com/snoyberg/yaml/issues/110)
+
 ## 0.8.23.1
 
 * Update CPP `MIN_VERSION_*` checks [#109](https://github.com/snoyberg/yaml/pull/109)
diff --git a/Data/Yaml/Internal.hs b/Data/Yaml/Internal.hs
--- a/Data/Yaml/Internal.hs
+++ b/Data/Yaml/Internal.hs
@@ -281,7 +281,7 @@
 -- | Strings which must be escaped so as not to be treated as non-string scalars.
 specialStrings :: HashSet.HashSet Text
 specialStrings = HashSet.fromList $ T.words
-    "y Y yes Yes YES n N no No NO true True TRUE false False FALSE on On ON off Off OFF null Null NULL ~"
+    "y Y yes Yes YES n N no No NO true True TRUE false False FALSE on On ON off Off OFF null Null NULL ~ *"
 
 isNumeric :: Text -> Bool
 isNumeric t =
diff --git a/libyaml/scanner.c b/libyaml/scanner.c
--- a/libyaml/scanner.c
+++ b/libyaml/scanner.c
@@ -3284,6 +3284,11 @@
 
         /* Check if we are at the end of the scalar. */
 
+        /* Fix for crash unitialized value crash
+         * Credit for the bug and input is to OSS Fuzz
+         * Credit for the fix to Alex Gaynor
+         */
+        if (!CACHE(parser, 1)) goto error;
         if (CHECK(parser->buffer, single ? '\'' : '"'))
             break;
 
diff --git a/libyaml/yaml.h b/libyaml/yaml.h
--- a/libyaml/yaml.h
+++ b/libyaml/yaml.h
@@ -26,10 +26,9 @@
 
 /** The public API declaration. */
 
-/* __MINGW32__ definition added for Haskell yaml package */
 #if defined(__MINGW32__)
 #   define  YAML_DECLARE(type)  type
-#elif _WIN32
+#elif defined(WIN32)
 #   if defined(YAML_DECLARE_STATIC)
 #       define  YAML_DECLARE(type)  type
 #   elif defined(YAML_DECLARE_EXPORT)
diff --git a/test/Data/YamlSpec.hs b/test/Data/YamlSpec.hs
--- a/test/Data/YamlSpec.hs
+++ b/test/Data/YamlSpec.hs
@@ -116,6 +116,7 @@
         it "True" $ D.encode (object ["foo" .= True]) `shouldBe` "foo: true\n"
         it "False" $ D.encode (object ["foo" .= False]) `shouldBe` "foo: false\n"
         it "simple string" $ D.encode (object ["foo" .= ("bar" :: T.Text)]) `shouldBe` "foo: bar\n"
+        it "*" $ D.encode (object ["foo" .= ("*" :: T.Text)]) `shouldBe` "foo: '*'\n"
 
     describe "special keys" $ do
         let tester key = it (T.unpack key) $
diff --git a/yaml.cabal b/yaml.cabal
--- a/yaml.cabal
+++ b/yaml.cabal
@@ -1,5 +1,5 @@
 name:            yaml
-version:         0.8.23.1
+version:         0.8.23.3
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>, Anton Ageev <antage@gmail.com>,Kirill Simonov
