aboutsummaryrefslogtreecommitdiff
path: root/devel/oniguruma5/files/patch-ruby-dev-21973
blob: a825c121c31c227653336fb701123125dc401b4d (plain) (blame)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Taken from: [ruby-dev:21973]

Index: regparse.c
===================================================================
--- regparse.c (.../ags/oniguruma/1.9.5)	(revision 245)
+++ regparse.c (.../runk/oniguruma)	(revision 245)
@@ -833,6 +833,10 @@
 	e->back_refs = (int* )NULL;
       }
     }
+    if (IS_NOT_NULL(t->e)) {
+      xfree(t->e);
+      t->e = NULL;
+    }
     t->num = 0;
   }
   return 0;
@@ -3611,6 +3615,7 @@
   enum CCVALTYPE val_type, in_type;
   int val_israw, in_israw;
 
+  prev_cc = (CClassNode* )NULL;
   *np = NULL_NODE;
   r = fetch_token_in_cc(tok, src, end, env);
   if (r == TK_BYTE && tok->u.c == '^') {
@@ -3633,7 +3638,6 @@
   *np = node = node_new_cclass();
   CHECK_NULL_RETURN_VAL(node, REGERR_MEMORY);
   cc = &(NCCLASS(node));
-  prev_cc = (CClassNode* )NULL;
 
   and_start = 0;
   state = CCS_START;
@@ -3810,6 +3814,7 @@
 	if (IS_NOT_NULL(prev_cc)) {
 	  r = and_cclass(prev_cc, cc);
 	  if (r != 0) goto err;
+	  bbuf_free(cc->mbuf);
 	}
 	else {
 	  prev_cc = cc;
@@ -3846,6 +3851,7 @@
   if (IS_NOT_NULL(prev_cc)) {
     r = and_cclass(prev_cc, cc);
     if (r != 0) goto err;
+    bbuf_free(cc->mbuf);
     cc = prev_cc;
   }
 
@@ -3864,6 +3870,8 @@
   return 0;
 
  err:
+  if (cc != &(NCCLASS(*np)))
+    bbuf_free(cc->mbuf);
   regex_node_free(*np);
   return r;
 }
@@ -4490,7 +4498,10 @@
 
   *top = NULL;
   r = parse_branch(&node, tok, term, src, end, env);
-  if (r < 0) return r;
+  if (r < 0) {
+    regex_node_free(node);
+    return r;
+  }
 
   if (r == term) {
     *top = node;
Index: regcomp.c
===================================================================
--- regcomp.c (.../ags/oniguruma/1.9.5)	(revision 245)
+++ regcomp.c (.../runk/oniguruma)	(revision 245)
@@ -3675,6 +3675,7 @@
     }
     else {
       len = mblen(code, *p);
+      if (i + len > OPT_EXACT_MAXLEN) break;
       for (j = 0; j < len; j++)
 	to->s[i++] = *p++;
     }