summaryrefslogtreecommitdiffhomepage
path: root/src/string.c
AgeCommit message (Collapse)Author
2019-07-10Remove an unused argument of `str_with_class()`KOBAYASHI Shuji
2019-07-05Read/write `MRB_STR_ASCII` flag only when `MRB_UTF8_STRING` is definedKOBAYASHI Shuji
2019-07-04Rename `MRB_STR_NO_UTF` to 'MRB_STR_ASCII`; close #4550Yukihiro "Matz" Matsumoto
In #4550, @shuuji proposed the name name `MRB_STR_NO_MULTI_BYTE` for more precise description. Although I agree that the name name is correct, but the flag means the string does not contain multi byte UTF-8 characters, i.e. all characters fit in the range of ASCII.
2019-07-04Fix heap buffer overflow; ref #4549dearblue
This patch is showed in #4549.
2019-06-29Simplify `mrb_str_aref_m()` and `mrb_str_aref()`dearblue
It is integration with part of argument parsing used in `mrb_str_aset_m()`.
2019-06-29Replace `String#[]=` method by C implementsdearblue
The purpose is to eliminate string objects that are temporarily created during processing.
2019-06-26Silence unused label warnings from gcc; ref #4524KOBAYASHI Shuji
mruby/mruby/src/string.c:1722:4: warning: label 'bytes' defined but not used [-Wunused-label] bytes: ^~~~~
2019-06-26Merge pull request #4524 from dearblue/reverse-utf8Yukihiro "Matz" Matsumoto
Change to UTF-8 string reversing with in place
2019-06-26Merge pull request #4532 from ↵Yukihiro "Matz" Matsumoto
shuujii/fix-String-byteslice-with-MRB_UTF8_STRING-and-some-edge-cases Fix `String#byteslice` with `MRB_UTF8_STRING` and some edge cases
2019-06-25Fix `String#byteslice` with `MRB_UTF8_STRING` and some edge casesKOBAYASHI Shuji
Example: $ bin/mruby -e ' p "あa".byteslice(1) p "bar".byteslice(3) p "bar".byteslice(4..0) ' Before this patch: "a" "" RangeError (4..0 out of range) After this patch (same as Ruby): "\x81" nil nil
2019-06-25Fix `mrb_str_to_str()` to handle symbols.Yukihiro "Matz" Matsumoto
2019-06-22Fix the unnecessary `mrb_str_modify()` calldearblue
Now to be calls `mrb_str_modify()` only once when 2 or more characters.
2019-06-22Delete the unnecessary block brace in `mrb_str_reverse_bang`dearblue
2019-06-22Fix string brakes for one UTF-8 charactordearblue
2019-06-22Change to UTF-8 string reversing with in placedearblue
Reverses UTF-8 strings without allocated heap for working memory. 1. String before reversing: ``` "!yburmの界世" # byte unit [33, 121, 98, 117, 114, 109, 227, 129, 174, 231, 149, 140, 228, 184, 150] ``` 2. Reverse the byte order of each character: ``` [33, 121, 98, 117, 114, 109, 174, 129, 227, 140, 149, 231, 150, 184, 228] ``` 3. Reverse the whole byte order and complete: ``` [228, 184, 150, 231, 149, 140, 227, 129, 174, 109, 114, 117, 98, 121, 33] # string "世界のmruby!" ```
2019-06-22Replacement to function for string reversingdearblue
2019-06-22Fix potential overflow in `utf8len()`dearblue
For example on 32 bit mode, when `p = 0xfffffffd`, `e = 0xfffffffe` and `len = 4`, the sum of `p` and `len` can be to `1`, and comparison with `e` will to be false. As a result, a segmentation fault occurs by referring to address 0.
2019-05-25Fix double rounded by negative indexdearblue
- Before patched: ``` $ mruby -e 'p (-12..-1).map { |i| "Hello"[i] }.join' "HelloHello" ``` - After patched: ``` $ mruby -e 'p (-12..-1).map { |i| "Hello"[i] }.join' "Hello" ```
2019-05-25Name the return value of `mrb_range_beg_len()`dearblue
2019-05-08Use `mrb_string_value_cstr` in `mrb_str_to_dbl`KOBAYASHI Shuji
2019-05-07Refactor `mrb_str_to_cstr` and `mrb_string_value_cstr`KOBAYASHI Shuji
- Extract null byte check to function. - Avoid string allocation if null byte is included. - Use `str_new` instead of `mrb_str_dup` + `mrb_str_modify`
2019-05-02Merge pull request #4417 from ↵Yukihiro "Matz" Matsumoto
shuujii/unify-overflow-error-class-for-conversion-to-integer-to-RangeError Unify overflow error class for conversion to integer to `RangeError`
2019-05-02Unify overflow error class for conversion to integer to `RangeError`KOBAYASHI Shuji
2019-05-01Remove unneeded `argc` check in `mrb_str_aref_m()`KOBAYASHI Shuji
2019-04-24Remove unnecessary `mrb_regexp_check()` and related functions.Yukihiro "Matz" Matsumoto
2019-04-09Extract frozen checking to functionKOBAYASHI Shuji
2019-03-26Fix missing `MRB_API` prefix for functions below; clse #4267Yukihiro "Matz" Matsumoto
Functions to add prototypes to headers: * mrb_ary_splice() * mrb_notimplement() * mrb_vformat() * mrb_cstr_to_dbl() * mrb_cstr_to_inum() Functions to be made `static` (`MRB_API` was not needed): * mrb_mod_module_function() * mrb_obj_hash() * mrb_str_len_to_inum() Functions to remove `MRB_API` from definitions (referenced from within `libmruby`): * mrb_mod_cv_defined() * mrb_mod_cv_get() * mrb_f_send()
2019-03-25Use uppercase version of `ctype` macros e.g. `ISSPACE`; fix #4338Yukihiro "Matz" Matsumoto
2019-02-06Reduce invocation of `mrb_convert_type()` from `mrb_str_to_str()`.Yukihiro "Matz" Matsumoto
2019-02-05Fix markup and remove unneeded comment for doc in `src/string.c` [ci skip]KOBAYASHI Shuji
2019-02-04Fix `Symbol#size` for multi-byte characters with `MRB_UTF8_STRING`KOBAYASHI Shuji
Before: p :あ.size #=> 3 After: p :あ.size #=> 1
2019-01-29Remove unused macro in `src/string.c`KOBAYASHI Shuji
2018-12-17Recover `String#to_str`; ref #4177Yukihiro "Matz" Matsumoto
We have removed implicit conversion to strings using `to_str`. But some people still using `to_str` as a typical string method, i.e. they do string check by code like: `obj.respond_to?(:to_str)`. So we have recovered the method.
2018-11-19Call `mrb_str_to_str` from `mrb_string_value_ptr` for compatibility.Yukihiro "Matz" Matsumoto
2018-11-19Use type checking `mrb_to_str` instead of converting `mrb_str_to_str`.Yukihiro "Matz" Matsumoto
2018-11-19Remove implicit conversion using `to_str` method; fix #3854Yukihiro "Matz" Matsumoto
We have added internal convenience method `__to_str` which does string type check. The issue #3854 was fixed but fundamental flaw of lack of stack depth check along with fibers still remains. Use `MRB_GC_FIXED_ARENA` for workaround.
2018-06-28Use `mrb_raise()` instead of `mrb_raisef()`; ref #4062Yukihiro "Matz" Matsumoto
2018-06-27Add negative check in `mrb_str_resize`; fix #4062Yukihiro "Matz" Matsumoto
2018-05-02Need to call `mrb_str_modify()` in `mrb_str_cat_str()`; fix #4018Yukihiro "Matz" Matsumoto
If `str` and `str2` are the same string object `str->ptr` may be rewritten by `mrb_str_modify()`.
2018-04-28Fix broken support of `MRB_WITHOUT_FLOAT`; fix #4015Yukihiro "Matz" Matsumoto
2018-04-17Fallback to float when caompiled binary with 64bit compiler.Takeshi Watanabe
closes #3997.
2018-03-24Return nil if type differ in `String#<=>`.Takeshi Watanabe
2018-02-12`String#inspect` to use hexadecimal, not octal to print unprintable.Yukihiro "Matz" Matsumoto
2017-12-23Make source compilable with C++17Lothar Scholz
Changes applied: - Removing "register" keyword - Fixing const pointer to pointer assignments - Adding type casts to rb_malloc calls
2017-12-12Modifying frozen objects will raise `FrozenError`.Yukihiro "Matz" Matsumoto
`FrozenError` is a subclass of `RuntimeError` which used to be raised. [Ruby2.5]
2017-11-08Should allocate memory region before updating `len`; fix #3842Yukihiro "Matz" Matsumoto
Otherwise half-baked string object will be allocated.
2017-11-04Merge branch 'master' of github.com:mruby/mrubyYAMAMOTO Masaya
2017-11-03Should not use `FSHARED` state for string from `irep` pools; fix #3829Yukihiro "Matz" Matsumoto
This strings in `irep` pools may be freed forcefully in `mrb_irep_free`. This commit probably fixes #3817 as well.
2017-10-11Add MRB_WITHOUT_FLOATYAMAMOTO Masaya
2017-10-01Add new type of shared string: `RSTR_FSHARED`.Yukihiro "Matz" Matsumoto
`RSTR_FSHARED` use frozen strings as shared body instead of `struct mrb_shared_string`. This reduces allocation from literal strings.