diff --git a/src/core/core-eval.c b/src/core/core-eval.c index fcddfc9f3..b0ed65e92 100644 --- a/src/core/core-eval.c +++ b/src/core/core-eval.c @@ -1153,6 +1153,7 @@ char * eval_hdata_count (const char *text, struct t_eval_context *eval_context) { struct t_hdata *hdata; + unsigned long ptr_value; void *pointer; char *pos1, *pos2, *value, *hdata_name, *pointer_name, str_count[64]; int rc, count; @@ -1183,9 +1184,10 @@ eval_hdata_count (const char *text, struct t_eval_context *eval_context) if (strncmp (pointer_name, "0x", 2) == 0) { - rc = sscanf (pointer_name, "%p", &pointer); + rc = sscanf (pointer_name, "%lx", &ptr_value); if ((rc != EOF) && (rc != 0)) { + pointer = (void *)ptr_value; if (!hdata_check_pointer (hdata, NULL, pointer)) goto end; } diff --git a/src/plugins/relay/relay.c b/src/plugins/relay/relay.c index d34d185ae..126df3280 100644 --- a/src/plugins/relay/relay.c +++ b/src/plugins/relay/relay.c @@ -268,6 +268,7 @@ relay_modifier_input_text_display_cb (const void *pointer, { struct t_gui_buffer *ptr_buffer; struct t_relay_remote *ptr_remote; + unsigned long value; const char *ptr_input, *ptr_text_local, *ptr_text_remote; char *text, *new_input; int rc, input_get_any_user_data; @@ -283,10 +284,12 @@ relay_modifier_input_text_display_cb (const void *pointer, if (!relay_remotes) return NULL; - rc = sscanf (modifier_data, "%p", &ptr_buffer); + rc = sscanf (modifier_data, "%lx", &value); if ((rc == EOF) || (rc == 0)) return NULL; + ptr_buffer = (struct t_gui_buffer *)value; + if (weechat_buffer_get_pointer (ptr_buffer, "plugin") != weechat_plugin) return NULL; diff --git a/src/plugins/trigger/trigger-callback.c b/src/plugins/trigger/trigger-callback.c index f928c1610..0c8318c6c 100644 --- a/src/plugins/trigger/trigger-callback.c +++ b/src/plugins/trigger/trigger-callback.c @@ -813,9 +813,9 @@ trigger_callback_modifier_cb (const void *pointer, void *data, const char *ptr_string; char *string_modified, *pos, *buffer_pointer; char *str_tags, **tags, *prefix, *string_no_color; + unsigned long value; int num_tags, rc; void *ptr_irc_server, *ptr_irc_channel; - struct t_gui_buffer *ptr_buffer; TRIGGER_CALLBACK_CB_INIT(NULL); @@ -928,10 +928,10 @@ trigger_callback_modifier_cb (const void *pointer, void *data, pos - modifier_data); if (buffer_pointer) { - rc = sscanf (buffer_pointer, "%p", &ptr_buffer); + rc = sscanf (buffer_pointer, "%lx", &value); if ((rc != EOF) && (rc != 0)) { - ctx.buffer = ptr_buffer; + ctx.buffer = (struct t_gui_buffer *)value; weechat_hashtable_set ( ctx.extra_vars, "tg_plugin", diff --git a/tests/unit/core/hook/test-hook-modifier.cpp b/tests/unit/core/hook/test-hook-modifier.cpp index 24c919222..c9fea36e9 100644 --- a/tests/unit/core/hook/test-hook-modifier.cpp +++ b/tests/unit/core/hook/test-hook-modifier.cpp @@ -63,6 +63,7 @@ test_modifier_cb (const void *pointer, void *data, char **items, *new_string; const char *ptr_plugin, *ptr_tags, *ptr_msg; int num_items, length, rc; + unsigned long value; struct t_gui_buffer *ptr_buffer; /* make C++ compiler happy */ @@ -83,10 +84,12 @@ test_modifier_cb (const void *pointer, void *data, ptr_tags = (num_items >= 2) ? items[1] : NULL; - rc = sscanf (items[0], "%p", &ptr_buffer); + rc = sscanf (items[0], "%lx", &value); if ((rc == EOF) || (rc == 0)) goto error; + ptr_buffer = (struct t_gui_buffer *)value; + ptr_plugin = gui_buffer_get_plugin_name (ptr_buffer); if (!ptr_plugin) goto error;