summaryrefslogtreecommitdiffhomepage
path: root/src
AgeCommit message (Collapse)Author
2015-05-07Defining static version of frexpl also fro MIPS platforms.Paolo Bosetti
On MIPS/linaro, libm.so lacks frexpl() as CygWin does.
2015-04-30push cmdarg_stack in lambda body; fix [ruby-bug#11107]Yukihiro "Matz" Matsumoto
2015-04-30Merge pull request #2778 from cremno/fix-load-size-error-macrosYukihiro "Matz" Matsumoto
src/load.c: fix size error macros
2015-04-30Merge pull request #2777 from cremno/fix-parser-locals-null-derefYukihiro "Matz" Matsumoto
parser: fix possible null dereferences
2015-04-30Merge pull request #2776 from cremno/undef-strndupYukihiro "Matz" Matsumoto
prevent accidental macro redefinition of strndup()
2015-04-29always define SIZE_ERROR_MUL() macrocremno
Previously there wasn't a way to trigger the useful definition, but it is needed and that in every case to check for integer overflow due to multiplication and faulty/modified binary files. Also change existing code to a calloc()-like parameter order.
2015-04-29remove SIZE_ERROR() macrocremno
It's only used once and in that case it isn't necessary anyway, since size_t must be at least 32 bits wide and the max. length of a filename is UINT16_MAX.
2015-04-29add more descriptive error message and fail earliercremno
2015-04-28fix null dereference (ref: #2769)cremno
parser_state->locals might be a null pointer. Fixes (and other similiar invalid code): def a; Proc.new do def x==x end end
2015-04-28prevent accidental macro redefinition of strndup()cremno
2015-04-28fix possible unsigned integer underflowcremno
buf_size has to be greater than header_size, otherwise subtracting header_size from buf_size will cause an integer underflow. Being equal to header_size is fine, however useless, so quit early.
2015-04-28unify error handlingcremno
Convert mrb_read_irep_file() to use goto like read_section_lv() and read_section_debug() already do.
2015-04-27C++ compilation failed due to skipping iniitalization by goto out_superYukihiro "Matz" Matsumoto
2015-04-27super should not be called outside of a method; fix #2770Yukihiro "Matz" Matsumoto
2015-04-27parser_state->locals may be NULL on some error conditions; fix #2769Yukihiro "Matz" Matsumoto
2015-04-18Suppress warnings generated by -Wwrite-stringsKouhei Sutou
Here are suppressed warnings: src/fmt_fp.c: In function 'fmt_fp': src/fmt_fp.c:124:16: warning: initialization discards 'const' qualifier from pointer target type char *ss = (t&32)?"inf":"INF"; ^ src/fmt_fp.c:125:17: warning: assignment discards 'const' qualifier from pointer target type if (y!=y) ss=(t&32)?"nan":"NAN"; ^ mrbgems/mruby-string-ext/src/string.c: In function 'mrb_str_succ_bang': mrbgems/mruby-string-ext/src/string.c:302:27: warning: assignment discards 'const' qualifier from pointer target type if (e == b) prepend = "1"; ^ mrbgems/mruby-string-ext/src/string.c:305:27: warning: assignment discards 'const' qualifier from pointer target type if (e == b) prepend = "a"; ^ mrbgems/mruby-string-ext/src/string.c:308:27: warning: assignment discards 'const' qualifier from pointer target type if (e == b) prepend = "A"; ^ mrbgems/mruby-bin-mruby/tools/mruby/mruby.c: In function 'main': mrbgems/mruby-bin-mruby/tools/mruby/mruby.c:213:13: warning: assignment discards 'const' qualifier from pointer target type cmdline = args.cmdline ? args.cmdline : "-"; ^ mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c: In function 'print_breakpoint': mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c:159:3: warning: initialization discards 'const' qualifier from pointer target type char* enable_letter[] = {BREAK_INFO_MSG_DISABLE, BREAK_INFO_MSG_ENABLE}; ^ mrbgems/mruby-bin-debugger/tools/mrdb/cmdbreak.c:159:3: warning: initialization discards 'const' qualifier from pointer target type
2015-03-22refactor write_pool_block()cremno
No need to write the same assertion in each case (except the default one). Instead we can assert after the switch statement.
2015-03-21execute ensure clause only when skipping call frame; fix #2726Yukihiro "Matz" Matsumoto
2015-03-16I have added the #ifdef __CYGWIN32__ to modify the fmt_fp.cTarosa
2015-03-16I modified the undefined frexpl in cygwin of makeTarosa
2015-03-05stack_extend in mrb_f_sendGo Saito
mrb_f_send needs stack_extend like OP_SEND Signed-off-by: Go Saito <[email protected]>
2015-02-28Use ptrdiff_t to suppress signedness warningKouhei Sutou
3df32161797aa9c6e9df259e8d8571b454cb2333 says so but there is no warning with GCC 4.9 on my Debian GNU/Linux environment.
2015-02-27Merge pull request #2736 from cremno/delete-prototypes-of-undefined-functionsYukihiro "Matz" Matsumoto
delete prototypes of undefined functions
2015-02-27fix MSVC initialization issue by a patch from @dyama; close #2734Yukihiro "Matz" Matsumoto
2015-02-27change size_t to ptrdiff_t to silence signedness warnings; #2732Yukihiro "Matz" Matsumoto
2015-02-26delete prototypes of undefined functionscremno
2015-02-25Fix a crash bug on raising after reallocKouhei Sutou
The following program reproduces this problem: #include <mruby.h> static mrb_value recursive(mrb_state *mrb, mrb_value self) { mrb_int n; mrb_get_args(mrb, "i", &n); if (n == 0) { mrb_raise(mrb, E_RUNTIME_ERROR, "XXX"); } else { mrb_funcall(mrb, self, "recursive", 1, mrb_fixnum_value(n - 1)); } return self; } int main(void) { mrb_state *mrb; mrb = mrb_open(); mrb_define_method(mrb, mrb->kernel_module, "recursive", recursive, MRB_ARGS_REQ(1)); mrb_funcall(mrb, mrb_top_self(mrb), "recursive", 1, mrb_fixnum_value(30)); mrb_close(mrb); } Recursive method call isn't required. It's just for expanding call info stack. If mrb_realloc() is called in cipush(), cibase address is changed. So, we shouldn't compare ci before mrb_realloc() and cibase after mrb_realloc(). It accesses unknown address and causes crash.
2015-02-24Fix a bug that no expression case doesn't return valid valueKouhei Sutou
Here is a script that reproduces this problem: x = case when true; 1 end p x # => main # 1 is expected
2015-02-24Merge pull request #2729 from kou/fix-if-and-no-value-returned-caseYukihiro "Matz" Matsumoto
Fix a bug that if and no return value case can't return true clause value
2015-02-24Fix a bug that if and no return value case can't return true clause valueKouhei Sutou
Here is a script that reproduce this problem: x = if true 1 else case 2 when 3 end 4 end p x # => nil # 1 is expected
2015-02-23fix pointer dereference after reallocGo Saito
In src/vm.c: mrb_funcall_with_block stack_extend may realloc mrb->c->stbase, if argv points on mruby's stack, then it points invalid address after stack_extend. e.g. src/class.c: mrb_instance_new This code: ```ruby class A def initialize(a0,a1,a2,a3,a4) a0.is_a? Array end end def f(a0,a1,a2,a3,a4) A.new(a0,a1,a2,a3,a4) f(a0,a1,a2,a3,a4) end f(0,1,2,3,4) ``` is expected to get exception ``` stack level too deep. (limit=(0x40000 - 128)) (SystemStackError) ``` but get segfault. Signed-off-by: Go Saito <[email protected]>
2015-02-16silence warnings in fmt_fp.cYukihiro "Matz" Matsumoto
2015-02-16Merge pull request #2723 from cremno/use-musl-fmt_fpYukihiro "Matz" Matsumoto
re-implement mrb_float_to_str()
2015-02-13re-implement mrb_float_to_str()cremno
The new implementation is backwards incompatible, but I couldn't find any usage outside mruby and I also couldn't think of a different and good name. All ISO C99 printf conversion specifiers for floating point numbers and an optional precision are supported. It is largely based on code from the MIT licensed musl libc (http://www.musl-libc.org/) and its floating point printing is exact (unlike the current code behind Float#to_s).
2015-02-12DISABLE_STDIO does not disable backtraces.Simon Génier
2015-02-07Merge pull request #2717 from sgnr/missing-lastpc-on-funcall-cfuncYukihiro "Matz" Matsumoto
Fix possible segfault when accessing backtrace with MRB_WORD_BOXING.
2015-02-05Fix possible segfault when accessing backtrace with MRB_WORD_BOXING.Simon Génier
2015-02-05Fix ensure with yield context on break and returnKouhei Sutou
How to reproduce: class A def x yield ensure y end def y end end # Work A.new.x do end # Not work # trace: # [2] /tmp/a.rb:5:in A.x # [0] /tmp/a.rb:15 # /tmp/a.rb:5: undefined method 'y' for main (NoMethodError) A.new.x do break end # trace: # [2] /tmp/a.rb:5:in A.call # [0] /tmp/a.rb:19 # /tmp/a.rb:5: undefined method 'y' for main (NoMethodError) lambda do A.new.x do return end end.call `self` in ensure is broken when yield and break/return are used.
2015-02-02Replace int with mrb_bool in dump_bigendian_p funcJun Hiroe
2015-02-02allow endian specification of mrb files by `mrbc -e/-E`Yukihiro "Matz" Matsumoto
`mruby -b` now accepts both big/little endian mrb (compiled binary) files. `mrbc` generates mrb files in big endian for .mrb files and in native endian for C files (with -B option specified) by default. If you are cross compiling, you need to specify target endian by -e/-E options if it is different from host endian.
2015-01-31block_given? should work with nested block; fix #2695 close #2712Yukihiro "Matz" Matsumoto
2015-01-26Use setter macro instead of directly setting valuesXuejie "Rafael" Xiao
2015-01-03Use mrb_exc_new_str_lit().Tatsuhiko Kubo
2014-12-27Use suitable type.Tatsuhiko Kubo
2014-12-23Fix splat and multiple assignmentsKouhei Sutou
Case1: From variable Code: a = [1, 2, 3, 4, 5] b, c, *d = a p [a, b, c, d] Before: [[1, 2, 3, 4, 5], 1, 2, []] After: [[1, 2, 3, 4, 5], 1, 2, [3, 4, 5]] Ruby: [[1, 2, 3, 4, 5], 1, 2, [3, 4, 5]] Case2: From variables Code: a = [1, 2, 3] b = [4, 5, 6, 7] c, d, *e, f, g = *a, *b p [a, b, c, d, e, f, g] Before: [[1, 2, 3], [4, 5, 6, 7], 1, 2, [], 6, 7] After: [[1, 2, 3], [4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7] Ruby: [[1, 2, 3], [4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7] Case 3: "for" Code: a = [1, 2, 3, 4, 5, 6, 7] for b, c, *d, e, f in [a] do p [a, b, c, d, e, f] end Before: [[1, 2, 3, 4, 5, 6, 7], 1, 2, [], nil, nil] After: [[1, 2, 3, 4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7] Ruby: [[1, 2, 3, 4, 5, 6, 7], 1, 2, [3, 4, 5], 6, 7]
2014-12-19block_given? should return correct value when called in blocks; close #2678Yukihiro "Matz" Matsumoto
avoid a loop to find parent's callinfo using mrb->c->cibase[env->cioff]
2014-12-19block_given? should return false on top-level; ref #2678Yukihiro "Matz" Matsumoto
2014-12-17String#[]: float handling merged to #2677Yukihiro "Matz" Matsumoto
2014-12-17try to convert not only nil but every objects to fixnums; ref #2677Yukihiro "Matz" Matsumoto
2014-12-17String#[] should reject nil indexh2so5