diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-11-03 01:59:08 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-11-03 08:24:47 +0900 |
| commit | e4662d77e75de4cc6d8e98e56bb0395cbbedbaf7 (patch) | |
| tree | 12048300d64366bd65d2aebdd3eaddc057a17077 /include | |
| parent | 13a318b0c70573af45f76a79f902f95845177107 (diff) | |
| download | mruby-e4662d77e75de4cc6d8e98e56bb0395cbbedbaf7.tar.gz mruby-e4662d77e75de4cc6d8e98e56bb0395cbbedbaf7.zip | |
Should not use `FSHARED` state for string from `irep` pools; fix #3829
This strings in `irep` pools may be freed forcefully in `mrb_irep_free`.
This commit probably fixes #3817 as well.
Diffstat (limited to 'include')
| -rw-r--r-- | include/mruby/string.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/include/mruby/string.h b/include/mruby/string.h index 9e499b58b..975b1fe0d 100644 --- a/include/mruby/string.h +++ b/include/mruby/string.h @@ -68,6 +68,9 @@ struct RString { #define RSTR_SET_NOFREE_FLAG(s) ((s)->flags |= MRB_STR_NOFREE) #define RSTR_UNSET_NOFREE_FLAG(s) ((s)->flags &= ~MRB_STR_NOFREE) +#define RSTR_POOL_P(s) ((s)->flags & MRB_STR_POOL) +#define RSTR_SET_POOL_FLAG(s) ((s)->flags |= MRB_STR_POOL) + /* * Returns a pointer from a Ruby string */ @@ -83,10 +86,11 @@ MRB_API mrb_int mrb_str_strlen(mrb_state*, struct RString*); #define MRB_STR_SHARED 1 #define MRB_STR_FSHARED 2 #define MRB_STR_NOFREE 4 -#define MRB_STR_NO_UTF 8 -#define MRB_STR_EMBED 16 -#define MRB_STR_EMBED_LEN_MASK 0x3e0 -#define MRB_STR_EMBED_LEN_SHIFT 5 +#define MRB_STR_POOL 8 +#define MRB_STR_NO_UTF 16 +#define MRB_STR_EMBED 32 +#define MRB_STR_EMBED_LEN_MASK 0x7c0 +#define MRB_STR_EMBED_LEN_SHIFT 6 void mrb_gc_free_str(mrb_state*, struct RString*); MRB_API void mrb_str_modify(mrb_state*, struct RString*); |
