diff --git a/third_party/lua-yaml/emitter.c b/third_party/lua-yaml/emitter.c
index 965df3e87e2d3e4313197c9b3d16ee2a3d931ca7..ce257d1847b4fd987990c8aa831fc5fdd95a41c3 100644
--- a/third_party/lua-yaml/emitter.c
+++ b/third_party/lua-yaml/emitter.c
@@ -236,6 +236,10 @@ static int
 yaml_emitter_write_tag_content(yaml_emitter_t *emitter,
         yaml_char_t *value, size_t length, int need_whitespace);
 
+static int
+yaml_emitter_write_verbatim_scalar(yaml_emitter_t *emitter,
+        yaml_char_t *value, size_t length, int allow_breaks);
+
 static int
 yaml_emitter_write_plain_scalar(yaml_emitter_t *emitter,
         yaml_char_t *value, size_t length, int allow_breaks);
@@ -1177,6 +1181,9 @@ static int
 yaml_emitter_select_scalar_style(yaml_emitter_t *emitter, yaml_event_t *event)
 {
     yaml_scalar_style_t style = event->data.scalar.style;
+    if (style == YAML_VERBATIM_SCALAR_STYLE)
+       goto done;
+
     int no_tag = (!emitter->tag_data.handle && !emitter->tag_data.suffix);
 
     if (no_tag && !event->data.scalar.plain_implicit
@@ -1226,8 +1233,8 @@ yaml_emitter_select_scalar_style(yaml_emitter_t *emitter, yaml_event_t *event)
         emitter->tag_data.handle_length = 1;
     }
 
+done:
     emitter->scalar_data.style = style;
-
     return 1;
 }
 
@@ -1293,6 +1300,11 @@ yaml_emitter_process_scalar(yaml_emitter_t *emitter)
 {
     switch (emitter->scalar_data.style)
     {
+        case YAML_VERBATIM_SCALAR_STYLE:
+            return yaml_emitter_write_verbatim_scalar(emitter,
+                    emitter->scalar_data.value, emitter->scalar_data.length,
+                    !emitter->simple_key_context);
+
         case YAML_PLAIN_SCALAR_STYLE:
             return yaml_emitter_write_plain_scalar(emitter,
                     emitter->scalar_data.value, emitter->scalar_data.length,
@@ -1469,6 +1481,20 @@ yaml_emitter_analyze_tag(yaml_emitter_t *emitter,
     return 1;
 }
 
+static int
+yaml_emitter_analyze_scalar_verbatim(yaml_emitter_t *emitter,
+        yaml_char_t *value, size_t length)
+{
+    emitter->scalar_data.value = value;
+    emitter->scalar_data.length = length;
+	emitter->scalar_data.multiline = 0;
+	emitter->scalar_data.flow_plain_allowed = 0;
+	emitter->scalar_data.block_plain_allowed = 1;
+	emitter->scalar_data.single_quoted_allowed = 1;
+	emitter->scalar_data.block_allowed = 0;
+	return 1;
+}
+
 /*
  * Check if a scalar is valid.
  */
@@ -1501,6 +1527,12 @@ yaml_emitter_analyze_scalar(yaml_emitter_t *emitter,
     emitter->scalar_data.value = value;
     emitter->scalar_data.length = length;
 
+	emitter->scalar_data.multiline = 0;
+	emitter->scalar_data.flow_plain_allowed = 0;
+	emitter->scalar_data.block_plain_allowed = 1;
+	emitter->scalar_data.single_quoted_allowed = 1;
+	emitter->scalar_data.block_allowed = 0;
+
     if (string.start == string.end)
     {
         emitter->scalar_data.multiline = 0;
@@ -1706,6 +1738,10 @@ yaml_emitter_analyze_event(yaml_emitter_t *emitter,
                 if (!yaml_emitter_analyze_tag(emitter, event->data.scalar.tag))
                     return 0;
             }
+			if (event->data.scalar.style == YAML_VERBATIM_SCALAR_STYLE) {
+				yaml_emitter_analyze_scalar_verbatim(emitter,
+							event->data.scalar.value, event->data.scalar.length);
+			} else
             if (!yaml_emitter_analyze_scalar(emitter,
                         event->data.scalar.value, event->data.scalar.length))
                 return 0;
@@ -1892,6 +1928,19 @@ yaml_emitter_write_tag_content(yaml_emitter_t *emitter,
     return 1;
 }
 
+static int
+yaml_emitter_write_verbatim_scalar(yaml_emitter_t *emitter,
+        yaml_char_t *value, size_t length, int allow_breaks)
+{
+	(void)allow_breaks;
+    yaml_string_t string;
+    STRING_ASSIGN(string, value, length);
+    while (string.pointer != string.end) {
+        if (!WRITE(emitter, string)) return 0;
+    }
+	return 1;
+}
+
 static int
 yaml_emitter_write_plain_scalar(yaml_emitter_t *emitter,
         yaml_char_t *value, size_t length, int allow_breaks)
diff --git a/third_party/lua-yaml/lyaml.c b/third_party/lua-yaml/lyaml.c
index 3614c5d2ff2074b980a37f6e6697b8c8fe9d24ee..5cc084206ae35559cf54bcb3542441c0354e9e62 100644
--- a/third_party/lua-yaml/lyaml.c
+++ b/third_party/lua-yaml/lyaml.c
@@ -439,7 +439,7 @@ static int dump_scalar(struct lua_yaml_dumper *dumper) {
    } else if (type == LUA_TUSERDATA) {
 		str = dump_tostring(dumper->L, -1);
 		len = strlen(str);
-		style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
+		style = YAML_VERBATIM_SCALAR_STYLE;
    } else if (type == LUA_TFUNCTION) {
 		str = dump_tostring(dumper->L, -1);
 		len = strlen(str);
diff --git a/third_party/lua-yaml/yaml.h b/third_party/lua-yaml/yaml.h
index 400cae1ead5953521529d9c90b6dce5d704cb5dd..9990682535c0ddb01e6133add32f10d2877efad9 100644
--- a/third_party/lua-yaml/yaml.h
+++ b/third_party/lua-yaml/yaml.h
@@ -165,6 +165,9 @@ typedef enum yaml_scalar_style_e {
     /** Let the emitter choose the style. */
     YAML_ANY_SCALAR_STYLE,
 
+    /** The verbatim scalar style. */
+    YAML_VERBATIM_SCALAR_STYLE,
+
     /** The plain scalar style. */
     YAML_PLAIN_SCALAR_STYLE,