aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-support/libyaml/files/libyaml-CVE-2014-2525.patch
blob: 2fdcba3eca0317f164784907c8360b08d639f433 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Heap-based buffer overflow in the yaml_parser_scan_uri_escapes function
in LibYAML before 0.1.6 allows context-dependent attackers to execute
arbitrary code via a long sequence of percent-encoded characters in a
URI in a YAML file.

Upstream-Status: Backport

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
diff --git a/src/scanner.c.old b/src/scanner.c
index a2e8619..c6cde3b 100644
--- a/src/scanner.c.old
+++ b/src/scanner.c
@@ -2619,6 +2619,9 @@ yaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive,
         /* Check if it is a URI-escape sequence. */
 
         if (CHECK(parser->buffer, '%')) {
+            if (!STRING_EXTEND(parser, string))
+                goto error;
+
             if (!yaml_parser_scan_uri_escapes(parser,
                         directive, start_mark, &string)) goto error;
         }
diff --git a/src/yaml_private.h.old b/src/yaml_private.h
index ed5ea66..d72acb4 100644
--- a/src/yaml_private.h.old
+++ b/src/yaml_private.h
@@ -132,9 +132,12 @@ yaml_string_join(
      (string).start = (string).pointer = (string).end = 0)
 
 #define STRING_EXTEND(context,string)                                           \
-    (((string).pointer+5 < (string).end)                                        \
+    ((((string).pointer+5 < (string).end)                                       \
         || yaml_string_extend(&(string).start,                                  \
-            &(string).pointer, &(string).end))
+            &(string).pointer, &(string).end)) ?                                \
+         1 :                                                                    \
+        ((context)->error = YAML_MEMORY_ERROR,                                  \
+         0))
 
 #define CLEAR(context,string)                                                   \
     ((string).pointer = (string).start,                                         \