kanayago 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c6e26071a97395c4f35c029908d78bba8a927f75129aa361367dc9cf549c3ca
4
- data.tar.gz: be48eae66a3bc69256ff3a9dba5afa842b8b8876f7be66eb72d79774fb94d878
3
+ metadata.gz: d25dec3b7633f7b58a2fe0ad33b1e6f05ef7e47bf5898d7b468a9bd60634c462
4
+ data.tar.gz: becaefd024bdf3b3a196c8971fac45211e69e13e2396d672d383795c98ca9038
5
5
  SHA512:
6
- metadata.gz: 5073effb4706b23b912a61f79a3bb40d2565e59f4d9805c6ba6f3006c613d8029340d2e164e67f94eb0341cc7b14d340ca5a9f862ee8c4fb84a2b8a86f1622b9
7
- data.tar.gz: 5731b6e8463b384cbd3dfe7bd3bf67835ea0a4a8f51ac0ee84259f8fd04d414fd5b2e1ea38e79f6f3dfab83787207c86757dfa5bce0180bfbf6fbac1102665ef
6
+ metadata.gz: 3f7089b463e7a7a3024f6a249dec5902e8ca399826c996027f513b76e32ccb2f43c650f784c55354b2cb731c1cac00cd7c625a76e1c82b998e428872882ce0cd
7
+ data.tar.gz: bcaf717b512cff34f3b31e1cf08eaf23789a6c93469b55b0b466dacbd4227a8be372357b7f28926238fb8e1eab014b476f30b1bd32033222ed7f014c7793823f
data/CHANGELOG.md CHANGED
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.1]
11
+
12
+ ### Fixed
13
+ - Fix segmentation fault when parsing dynamic symbols in complex hash structures
14
+ - Fix segmentation fault when parsing nested modules with outer constant references
15
+ - Fix `module_node_new` to use `RNODE_MODULE` instead of incorrect `RNODE_CLASS` macro
16
+ - Add NULL pointer checks in `dynamic_string_node_new`, `dynamic_symbol_node_new`, `dynamic_execute_string_node_new`, and `dynamic_regexp_node_new`
17
+
18
+ ### Changed
19
+ - Remove incorrect `@super` field access from `ModuleNode` (modules do not have superclasses)
20
+
10
21
  ## [0.4.0]
11
22
 
12
23
  ### Added
data/README.md CHANGED
@@ -31,7 +31,7 @@ Finally, build `Kanayago` gem and install it.
31
31
 
32
32
  ```console
33
33
  bundle exec rake build
34
- gem install pkg/kanayago-0.4.0.gem
34
+ gem install pkg/kanayago-0.4.1.gem
35
35
  ```
36
36
 
37
37
  ## Usage
@@ -193,9 +193,8 @@ module_node_new(const NODE *node)
193
193
  {
194
194
  VALUE obj = rb_class_new_instance(0, 0, rb_cModuleNode);
195
195
 
196
- rb_ivar_set(obj, rb_intern("@cpath"), ast_to_node_instance(RNODE_CLASS(node)->nd_cpath));
197
- rb_ivar_set(obj, rb_intern("@super"), ast_to_node_instance(RNODE_CLASS(node)->nd_super));
198
- rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_CLASS(node)->nd_body));
196
+ rb_ivar_set(obj, rb_intern("@cpath"), ast_to_node_instance(RNODE_MODULE(node)->nd_cpath));
197
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_MODULE(node)->nd_body));
199
198
 
200
199
  return obj;
201
200
  }
@@ -19,12 +19,22 @@ dynamic_string_node_new(const NODE *node)
19
19
  {
20
20
  VALUE obj = rb_class_new_instance(0, 0, rb_cDynamicStringNode);
21
21
  rb_parser_string_t *str = RNODE_DSTR(node)->string;
22
- rb_encoding *enc = str->enc;
23
- char *ptr = str->ptr;
24
- long len = str->len;
25
-
26
- rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
27
- rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance((const NODE *)RNODE_DSTR(node)->nd_next));
22
+ const NODE *nd_next = (const NODE *)RNODE_DSTR(node)->nd_next;
23
+
24
+ if (str) {
25
+ rb_encoding *enc = str->enc;
26
+ char *ptr = str->ptr;
27
+ long len = str->len;
28
+ rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
29
+ } else {
30
+ rb_ivar_set(obj, rb_intern("@string"), rb_str_new("", 0));
31
+ }
32
+
33
+ if (nd_next && nd_next != (NODE *)-1) {
34
+ rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance(nd_next));
35
+ } else {
36
+ rb_ivar_set(obj, rb_intern("@next_nodes"), Qnil);
37
+ }
28
38
 
29
39
  return obj;
30
40
  }
@@ -34,12 +44,22 @@ dynamic_symbol_node_new(const NODE *node)
34
44
  {
35
45
  VALUE obj = rb_class_new_instance(0, 0, rb_cDynamicSymbolNode);
36
46
  rb_parser_string_t *str = RNODE_DSYM(node)->string;
37
- rb_encoding *enc = str->enc;
38
- char *ptr = str->ptr;
39
- long len = str->len;
40
-
41
- rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
42
- rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance((const NODE *)RNODE_DSYM(node)->nd_next));
47
+ const NODE *nd_next = (const NODE *)RNODE_DSYM(node)->nd_next;
48
+
49
+ if (str) {
50
+ rb_encoding *enc = str->enc;
51
+ char *ptr = str->ptr;
52
+ long len = str->len;
53
+ rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
54
+ } else {
55
+ rb_ivar_set(obj, rb_intern("@string"), rb_str_new("", 0));
56
+ }
57
+
58
+ if (nd_next && nd_next != (NODE *)-1) {
59
+ rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance(nd_next));
60
+ } else {
61
+ rb_ivar_set(obj, rb_intern("@next_nodes"), Qnil);
62
+ }
43
63
 
44
64
  return obj;
45
65
  }
@@ -77,12 +97,22 @@ dynamic_execute_string_node_new(const NODE *node)
77
97
  {
78
98
  VALUE obj = rb_class_new_instance(0, 0, rb_cDynamicExecuteStringNode);
79
99
  rb_parser_string_t *str = RNODE_DXSTR(node)->string;
80
- rb_encoding *enc = str->enc;
81
- char *ptr = str->ptr;
82
- long len = str->len;
83
-
84
- rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
85
- rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance((const NODE *)RNODE_DXSTR(node)->nd_next));
100
+ const NODE *nd_next = (const NODE *)RNODE_DXSTR(node)->nd_next;
101
+
102
+ if (str) {
103
+ rb_encoding *enc = str->enc;
104
+ char *ptr = str->ptr;
105
+ long len = str->len;
106
+ rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
107
+ } else {
108
+ rb_ivar_set(obj, rb_intern("@string"), rb_str_new("", 0));
109
+ }
110
+
111
+ if (nd_next && nd_next != (NODE *)-1) {
112
+ rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance(nd_next));
113
+ } else {
114
+ rb_ivar_set(obj, rb_intern("@next_nodes"), Qnil);
115
+ }
86
116
 
87
117
  return obj;
88
118
  }
@@ -112,13 +142,24 @@ dynamic_regexp_node_new(const NODE *node)
112
142
  {
113
143
  VALUE obj = rb_class_new_instance(0, 0, rb_cDynamicRegexpNode);
114
144
  rb_parser_string_t *str = RNODE_DREGX(node)->string;
115
- rb_encoding *enc = str->enc;
116
- char *ptr = str->ptr;
117
- long len = str->len;
118
145
  long options = RNODE_DREGX(node)->as.nd_cflag;
146
+ const NODE *nd_next = (const NODE *)RNODE_DREGX(node)->nd_next;
147
+
148
+ if (str) {
149
+ rb_encoding *enc = str->enc;
150
+ char *ptr = str->ptr;
151
+ long len = str->len;
152
+ rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
153
+ } else {
154
+ rb_ivar_set(obj, rb_intern("@string"), rb_str_new("", 0));
155
+ }
156
+
157
+ if (nd_next && nd_next != (NODE *)-1) {
158
+ rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance(nd_next));
159
+ } else {
160
+ rb_ivar_set(obj, rb_intern("@next_nodes"), Qnil);
161
+ }
119
162
 
120
- rb_ivar_set(obj, rb_intern("@string"), rb_enc_str_new(ptr, len, enc));
121
- rb_ivar_set(obj, rb_intern("@next_nodes"), ast_to_node_instance((const NODE *)RNODE_DREGX(node)->nd_next));
122
163
  rb_ivar_set(obj, rb_intern("@options"), LONG2FIX(options));
123
164
 
124
165
  return obj;
@@ -74,7 +74,7 @@ module Kanayago
74
74
  end
75
75
 
76
76
  class ModuleNode
77
- attr_reader :cpath, :super, :body
77
+ attr_reader :cpath, :body
78
78
  end
79
79
 
80
80
  class SingletonClassNode
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kanayago
4
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kanayago
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - S-H-GAMELINKS