From 32793d9a5b60ef0591c71c12ad75121d9b155adf Mon Sep 17 00:00:00 2001 From: root Date: Mon, 25 Mar 2013 00:05:30 -0700 Subject: Mon Mar 25 00:05:30 PDT 2013 --- extra/weechat/ruby-2.0.0-crash-fix.diff | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 extra/weechat/ruby-2.0.0-crash-fix.diff (limited to 'extra/weechat/ruby-2.0.0-crash-fix.diff') diff --git a/extra/weechat/ruby-2.0.0-crash-fix.diff b/extra/weechat/ruby-2.0.0-crash-fix.diff new file mode 100644 index 000000000..bfc816ade --- /dev/null +++ b/extra/weechat/ruby-2.0.0-crash-fix.diff @@ -0,0 +1,76 @@ +X-Git-Url: http://git.savannah.gnu.org/gitweb/?p=weechat.git;a=blobdiff_plain;f=src%2Fplugins%2Fruby%2Fweechat-ruby-api.c;h=101caec961829de03f8097edc63f497eab99aaa3;hp=bbc2fbcbe3c5290a8a975c4676a85a8c7e0998b7;hb=4fdbb83a079f24a742633fd4d02084911580c19c;hpb=55e58811b3df451db4f95b1035a39f5659788989 + +diff --git a/src/plugins/ruby/weechat-ruby-api.c b/src/plugins/ruby/weechat-ruby-api.c +index bbc2fbc..101caec 100644 +--- a/src/plugins/ruby/weechat-ruby-api.c ++++ b/src/plugins/ruby/weechat-ruby-api.c +@@ -1333,28 +1333,21 @@ weechat_ruby_api_config_new_option (VALUE class, VALUE config_file, + VALUE description, VALUE string_values, + VALUE min, VALUE max, VALUE default_value, + VALUE value, VALUE null_value_allowed, +- VALUE function_check_value, +- VALUE data_check_value, +- VALUE function_change, +- VALUE data_change, +- VALUE function_delete, +- VALUE data_delete) ++ VALUE callbacks) + { + char *c_config_file, *c_section, *c_name, *c_type, *c_description; + char *c_string_values, *c_default_value, *c_value; + char *c_function_check_value, *c_data_check_value, *c_function_change; + char *c_data_change, *c_function_delete, *c_data_delete, *result; + int c_min, c_max, c_null_value_allowed; +- VALUE return_value; ++ VALUE function_check_value, data_check_value, function_change, data_change; ++ VALUE function_delete, data_delete, return_value; + + API_FUNC(1, "config_new_option", API_RETURN_EMPTY); + if (NIL_P (config_file) || NIL_P (section) || NIL_P (name) || NIL_P (type) + || NIL_P (description) || NIL_P (string_values) || NIL_P (min) + || NIL_P (max) || NIL_P (default_value) || NIL_P (value) +- || NIL_P (null_value_allowed) || NIL_P (function_check_value) +- || NIL_P (data_check_value) || NIL_P (function_change) +- || NIL_P (data_change) || NIL_P (function_delete) +- || NIL_P (data_delete)) ++ || NIL_P (null_value_allowed) || NIL_P (callbacks)) + API_WRONG_ARGS(API_RETURN_EMPTY); + + Check_Type (config_file, T_STRING); +@@ -1368,12 +1361,21 @@ weechat_ruby_api_config_new_option (VALUE class, VALUE config_file, + Check_Type (default_value, T_STRING); + Check_Type (value, T_STRING); + Check_Type (null_value_allowed, T_FIXNUM); +- Check_Type (function_check_value, T_STRING); +- Check_Type (data_check_value, T_STRING); +- Check_Type (function_change, T_STRING); +- Check_Type (data_change, T_STRING); +- Check_Type (function_delete, T_STRING); +- Check_Type (data_delete, T_STRING); ++ Check_Type (callbacks, T_ARRAY); ++ ++ /* ++ * due to a Ruby limitation (15 arguments max by function), we receive the ++ * the callbacks in an array of 6 strings (3 callbacks + 3 data) ++ */ ++ if (RARRAY_LEN(callbacks) != 6) ++ API_WRONG_ARGS(API_RETURN_EMPTY); ++ ++ function_check_value = rb_ary_entry (callbacks, 0); ++ data_check_value = rb_ary_entry (callbacks, 1); ++ function_change = rb_ary_entry (callbacks, 2); ++ data_change = rb_ary_entry (callbacks, 3); ++ function_delete = rb_ary_entry (callbacks, 4); ++ data_delete = rb_ary_entry (callbacks, 5); + + c_config_file = StringValuePtr (config_file); + c_section = StringValuePtr (section); +@@ -5915,7 +5917,7 @@ weechat_ruby_api_init (VALUE ruby_mWeechat) + API_DEF_FUNC(config_new, 3); + API_DEF_FUNC(config_new_section, 14); + API_DEF_FUNC(config_search_section, 2); +- API_DEF_FUNC(config_new_option, 17); ++ API_DEF_FUNC(config_new_option, 12); + API_DEF_FUNC(config_search_option, 3); + API_DEF_FUNC(config_string_to_boolean, 1); + API_DEF_FUNC(config_option_reset, 2); -- cgit v1.2.3-54-g00ecf