From c73b944629b301700f459cadafbee2eac70c5d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Mon, 4 Dec 2017 22:07:38 +0100 Subject: [PATCH] python: fix integer arguments in hook_connect() and hook_fd() callbacks (cherry picked from commit 515334e53b431c353ce3c407f58b880fbf749fc3) --- ChangeLog.adoc | 8 +++++++ src/plugins/python/weechat-python-api.c | 28 +++++++++++++++++++------ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 85de0bda0..7464e0655 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -15,6 +15,14 @@ https://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes] (file _ReleaseNotes.adoc_ in sources). +[[v2.0.1]] +== Version 2.0.1 (under dev) + +Bug fixes:: + + * python: fix arguments status/gnutls_rc/sock in hook_connect() callback + * python: fix argument fd in hook_fd() callback + [[v2.0]] == Version 2.0 (2017-12-03) diff --git a/src/plugins/python/weechat-python-api.c b/src/plugins/python/weechat-python-api.c index 52222cbbe..32f8f0eef 100644 --- a/src/plugins/python/weechat-python-api.c +++ b/src/plugins/python/weechat-python-api.c @@ -2255,12 +2255,12 @@ weechat_python_api_hook_fd_cb (const void *pointer, void *data, int fd) if (ptr_function && ptr_function[0]) { func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; - func_argv[1] = &fd; + func_argv[1] = PyLong_FromLong((long)fd); rc = (int *) weechat_python_exec (script, WEECHAT_SCRIPT_EXEC_INT, ptr_function, - "si", func_argv); + "sO", func_argv); if (!rc) ret = WEECHAT_RC_ERROR; @@ -2269,6 +2269,10 @@ weechat_python_api_hook_fd_cb (const void *pointer, void *data, int fd) ret = *rc; free (rc); } + if (func_argv[1]) + { + Py_XDECREF((PyObject *)func_argv[1]); + } return ret; } @@ -2449,16 +2453,16 @@ weechat_python_api_hook_connect_cb (const void *pointer, void *data, if (ptr_function && ptr_function[0]) { func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; - func_argv[1] = &status; - func_argv[2] = &gnutls_rc; - func_argv[3] = &sock; + func_argv[1] = PyLong_FromLong((long)status); + func_argv[2] = PyLong_FromLong((long)gnutls_rc); + func_argv[3] = PyLong_FromLong((long)sock); func_argv[4] = (ip_address) ? (char *)ip_address : empty_arg; func_argv[5] = (error) ? (char *)error : empty_arg; rc = (int *) weechat_python_exec (script, WEECHAT_SCRIPT_EXEC_INT, ptr_function, - "siiiss", func_argv); + "sOOOss", func_argv); if (!rc) ret = WEECHAT_RC_ERROR; @@ -2467,6 +2471,18 @@ weechat_python_api_hook_connect_cb (const void *pointer, void *data, ret = *rc; free (rc); } + if (func_argv[1]) + { + Py_XDECREF((PyObject *)func_argv[1]); + } + if (func_argv[2]) + { + Py_XDECREF((PyObject *)func_argv[2]); + } + if (func_argv[3]) + { + Py_XDECREF((PyObject *)func_argv[3]); + } return ret; }