diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 02a84043e..5284d07ed 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -32,7 +32,7 @@ Bug fixes:: * irc: fix display of TOPIC and QUIT messages with an empty trailing parameter (issue #1797) * javascript: fix return of long value in functions infolist_time, hdata_long and hdata_time * relay: fix parsing of IRC messages received from clients (issue #1796) - * scripts: fix issue with year ≥ 2038 in function infolist_new_var_time (plugins: python/lua/tcl/guile/javascript) + * scripts: fix issue with year ≥ 2038 in functions infolist_new_var_time, print_date_tags and print_y_date_tags (plugins: python/lua/tcl/guile/javascript) * xfer: fix crash when closing DCC chat buffer Tests:: diff --git a/src/plugins/guile/weechat-guile-api.c b/src/plugins/guile/weechat-guile-api.c index e7a817dbc..c83577860 100644 --- a/src/plugins/guile/weechat-guile-api.c +++ b/src/plugins/guile/weechat-guile-api.c @@ -1902,7 +1902,7 @@ weechat_guile_api_print_date_tags (SCM buffer, SCM date, SCM tags, SCM message) plugin_script_api_printf_date_tags (weechat_guile_plugin, guile_current_script, API_STR2PTR(API_SCM_TO_STRING(buffer)), - scm_to_int (date), + (time_t)scm_to_long (date), API_SCM_TO_STRING(tags), "%s", API_SCM_TO_STRING(message)); @@ -1940,7 +1940,7 @@ weechat_guile_api_print_y_date_tags (SCM buffer, SCM y, SCM date, SCM tags, guile_current_script, API_STR2PTR(API_SCM_TO_STRING(buffer)), scm_to_int (y), - scm_to_int (date), + (time_t)scm_to_long (date), API_SCM_TO_STRING(tags), "%s", API_SCM_TO_STRING(message)); diff --git a/src/plugins/javascript/weechat-js-api.cpp b/src/plugins/javascript/weechat-js-api.cpp index ec7b2cca4..32a2d742a 100644 --- a/src/plugins/javascript/weechat-js-api.cpp +++ b/src/plugins/javascript/weechat-js-api.cpp @@ -1787,9 +1787,9 @@ API_FUNC(print) API_FUNC(print_date_tags) { - int date; + long date; - API_INIT_FUNC(1, "print_date_tags", "siss", API_RETURN_ERROR); + API_INIT_FUNC(1, "print_date_tags", "snss", API_RETURN_ERROR); v8::String::Utf8Value buffer(args[0]); date = args[1]->IntegerValue(); @@ -1800,7 +1800,7 @@ API_FUNC(print_date_tags) weechat_js_plugin, js_current_script, (struct t_gui_buffer *)API_STR2PTR(*buffer), - date, + (time_t)date, *tags, "%s", *message); @@ -1828,9 +1828,10 @@ API_FUNC(print_y) API_FUNC(print_y_date_tags) { - int y, date; + int y; + long date; - API_INIT_FUNC(1, "print_y_date_tags", "siiss", API_RETURN_ERROR); + API_INIT_FUNC(1, "print_y_date_tags", "sinss", API_RETURN_ERROR); v8::String::Utf8Value buffer(args[0]); y = args[1]->IntegerValue(); @@ -1842,7 +1843,7 @@ API_FUNC(print_y_date_tags) js_current_script, (struct t_gui_buffer *)API_STR2PTR(*buffer), y, - date, + (time_t)date, *tags, "%s", *message); diff --git a/src/plugins/lua/weechat-lua-api.c b/src/plugins/lua/weechat-lua-api.c index 5957f147d..2e62804ff 100644 --- a/src/plugins/lua/weechat-lua-api.c +++ b/src/plugins/lua/weechat-lua-api.c @@ -1981,7 +1981,7 @@ API_FUNC(print) API_FUNC(print_date_tags) { const char *buffer, *tags, *message; - int date; + long date; API_INIT_FUNC(1, "print_date_tags", API_RETURN_ERROR); if (lua_gettop (L) < 4) @@ -1995,7 +1995,7 @@ API_FUNC(print_date_tags) plugin_script_api_printf_date_tags (weechat_lua_plugin, lua_current_script, API_STR2PTR(buffer), - date, + (time_t)date, tags, "%s", message); @@ -2027,7 +2027,8 @@ API_FUNC(print_y) API_FUNC(print_y_date_tags) { const char *buffer, *tags, *message; - int y, date; + int y; + long date; API_INIT_FUNC(1, "print_y_date_tags", API_RETURN_ERROR); if (lua_gettop (L) < 5) @@ -2043,7 +2044,7 @@ API_FUNC(print_y_date_tags) lua_current_script, API_STR2PTR(buffer), y, - date, + (time_t)date, tags, "%s", message); diff --git a/src/plugins/perl/weechat-perl-api.c b/src/plugins/perl/weechat-perl-api.c index 88b491217..33fd6677c 100644 --- a/src/plugins/perl/weechat-perl-api.c +++ b/src/plugins/perl/weechat-perl-api.c @@ -1909,7 +1909,7 @@ API_FUNC(print_date_tags) plugin_script_api_printf_date_tags (weechat_perl_plugin, perl_current_script, API_STR2PTR(buffer), - SvIV (ST (1)), + (time_t)(SvIV (ST (1))), /* date */ tags, "%s", message); @@ -1953,8 +1953,8 @@ API_FUNC(print_y_date_tags) plugin_script_api_printf_y_date_tags (weechat_perl_plugin, perl_current_script, API_STR2PTR(buffer), - SvIV (ST (1)), - SvIV (ST (2)), + SvIV (ST (1)), /* y */ + (time_t)(SvIV (ST (2))), /* date */ tags, "%s", message); @@ -4594,7 +4594,7 @@ API_FUNC(infolist_new_var_time) result = API_PTR2STR(weechat_infolist_new_var_time (API_STR2PTR(item), name, - (time_t)SvIV (ST (2)))); /* value */ + (time_t)(SvIV (ST (2))))); /* value */ API_RETURN_STRING(result); } diff --git a/src/plugins/python/weechat-python-api.c b/src/plugins/python/weechat-python-api.c index 2251a517b..cab0040dc 100644 --- a/src/plugins/python/weechat-python-api.c +++ b/src/plugins/python/weechat-python-api.c @@ -1889,20 +1889,20 @@ API_FUNC(prnt) API_FUNC(prnt_date_tags) { char *buffer, *tags, *message; - int date; + long date; API_INIT_FUNC(1, "prnt_date_tags", API_RETURN_ERROR); buffer = NULL; date = 0; tags = NULL; message = NULL; - if (!PyArg_ParseTuple (args, "siss", &buffer, &date, &tags, &message)) + if (!PyArg_ParseTuple (args, "slss", &buffer, &date, &tags, &message)) API_WRONG_ARGS(API_RETURN_ERROR); plugin_script_api_printf_date_tags (weechat_python_plugin, python_current_script, API_STR2PTR(buffer), - date, + (time_t)date, tags, "%s", message); @@ -1933,7 +1933,8 @@ API_FUNC(prnt_y) API_FUNC(prnt_y_date_tags) { char *buffer, *tags, *message; - int y, date; + int y; + long date; API_INIT_FUNC(1, "prnt_y_date_tags", API_RETURN_ERROR); buffer = NULL; @@ -1941,14 +1942,14 @@ API_FUNC(prnt_y_date_tags) date = 0; tags = NULL; message = NULL; - if (!PyArg_ParseTuple (args, "siiss", &buffer, &y, &date, &tags, &message)) + if (!PyArg_ParseTuple (args, "silss", &buffer, &y, &date, &tags, &message)) API_WRONG_ARGS(API_RETURN_ERROR); plugin_script_api_printf_y_date_tags (weechat_python_plugin, python_current_script, API_STR2PTR(buffer), y, - date, + (time_t)date, tags, "%s", message); diff --git a/src/plugins/tcl/weechat-tcl-api.c b/src/plugins/tcl/weechat-tcl-api.c index 13da3f545..4da40eec1 100644 --- a/src/plugins/tcl/weechat-tcl-api.c +++ b/src/plugins/tcl/weechat-tcl-api.c @@ -2146,13 +2146,14 @@ API_FUNC(print_date_tags) { Tcl_Obj *objp; char *buffer, *tags, *message; - int i, date; + int i; + long date; API_INIT_FUNC(1, "print_date_tags", API_RETURN_ERROR); if (objc < 5) API_WRONG_ARGS(API_RETURN_ERROR); - if (Tcl_GetIntFromObj (interp, objv[2], &date) != TCL_OK) + if (Tcl_GetLongFromObj (interp, objv[2], &date) != TCL_OK) API_WRONG_ARGS(API_RETURN_ERROR); buffer = Tcl_GetStringFromObj (objv[1], &i); @@ -2162,7 +2163,7 @@ API_FUNC(print_date_tags) plugin_script_api_printf_date_tags (weechat_tcl_plugin, tcl_current_script, API_STR2PTR(buffer), - date, + (time_t)date, tags, "%s", message); @@ -2198,7 +2199,8 @@ API_FUNC(print_y_date_tags) { Tcl_Obj *objp; char *buffer, *tags, *message; - int i, y, date; + int i, y; + long date; API_INIT_FUNC(1, "print_y_date_tags", API_RETURN_ERROR); if (objc < 6) @@ -2207,7 +2209,7 @@ API_FUNC(print_y_date_tags) if (Tcl_GetIntFromObj (interp, objv[2], &y) != TCL_OK) API_WRONG_ARGS(API_RETURN_ERROR); - if (Tcl_GetIntFromObj (interp, objv[3], &date) != TCL_OK) + if (Tcl_GetLongFromObj (interp, objv[3], &date) != TCL_OK) API_WRONG_ARGS(API_RETURN_ERROR); buffer = Tcl_GetStringFromObj (objv[1], &i); @@ -2218,7 +2220,7 @@ API_FUNC(print_y_date_tags) tcl_current_script, API_STR2PTR(buffer), y, - date, + (time_t)date, tags, "%s", message); diff --git a/tests/scripts/python/testapi.py b/tests/scripts/python/testapi.py index a9aaffee7..c4630981e 100644 --- a/tests/scripts/python/testapi.py +++ b/tests/scripts/python/testapi.py @@ -170,6 +170,16 @@ def test_display(): check(weechat.color('unknown') == '') weechat.prnt('', '## test print core buffer') weechat.prnt_date_tags('', 946681200, 'tag1,tag2', '## test print_date_tags core buffer') + weechat.prnt_date_tags('', 5680744830, 'tag1,tag2', '## test print_date_tags core buffer, year 2150') + hdata_buffer = weechat.hdata_get('buffer') + hdata_lines = weechat.hdata_get('lines') + hdata_line = weechat.hdata_get('line') + hdata_line_data = weechat.hdata_get('line_data') + buffer = weechat.buffer_search_main() + own_lines = weechat.hdata_pointer(hdata_buffer, buffer, 'own_lines') + line = weechat.hdata_pointer(hdata_lines, own_lines, 'last_line') + data = weechat.hdata_pointer(hdata_line, line, 'data') + check(weechat.hdata_time(hdata_line_data, data, 'date') == 5680744830) buffer = weechat.buffer_new('test_formatted', 'buffer_input_cb', '', 'buffer_close_cb', '') check(buffer != '') check(weechat.buffer_get_integer(buffer, 'type') == 0) @@ -181,6 +191,7 @@ def test_display(): check(buffer != '') weechat.prnt_y(buffer, 0, '## test print_y free buffer') weechat.prnt_y_date_tags(buffer, 0, 946681200, 'tag1,tag2', '## test print_y_date_tags free buffer') + weechat.prnt_y_date_tags(buffer, 1, 5680744830, 'tag1,tag2', '## test print_y_date_tags free buffer, year 2150') weechat.buffer_close(buffer)