1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-23 03:16:37 +02:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Sébastien Helleu 72dce52901 core, plugins: replace "%p" by "%lx" in calls to sscanf 2025-05-15 20:12:12 +02:00
Sébastien Helleu de7150c65b Revert "core, plugins: replace "%lx" by "%p" in calls to sscanf"
This reverts commit e64ab3c675.

This was causing incorrect conversion of strings "0x..." to pointers on systems
like Solaris/ILLUMOS.

And as a side effect, buffers were sometimes empty in weechat relay clients
like glowing-bear.
2025-05-15 20:10:32 +02:00
23 changed files with 105 additions and 69 deletions
+6 -2
View File
@@ -1153,6 +1153,7 @@ char *
eval_hdata_count (const char *text, struct t_eval_context *eval_context) eval_hdata_count (const char *text, struct t_eval_context *eval_context)
{ {
struct t_hdata *hdata; struct t_hdata *hdata;
unsigned long ptr_value;
void *pointer; void *pointer;
char *pos1, *pos2, *value, *hdata_name, *pointer_name, str_count[64]; char *pos1, *pos2, *value, *hdata_name, *pointer_name, str_count[64];
int rc, count; 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) 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)) if ((rc != EOF) && (rc != 0))
{ {
pointer = (void *)ptr_value;
if (!hdata_check_pointer (hdata, NULL, pointer)) if (!hdata_check_pointer (hdata, NULL, pointer))
goto end; goto end;
} }
@@ -1422,6 +1424,7 @@ eval_string_hdata (const char *text, struct t_eval_context *eval_context)
void *pointer; void *pointer;
struct t_hdata *hdata; struct t_hdata *hdata;
int rc; int rc;
unsigned long ptr;
value = NULL; value = NULL;
hdata_name = NULL; hdata_name = NULL;
@@ -1473,9 +1476,10 @@ eval_string_hdata (const char *text, struct t_eval_context *eval_context)
{ {
if (strncmp (pointer_name, "0x", 2) == 0) if (strncmp (pointer_name, "0x", 2) == 0)
{ {
rc = sscanf (pointer_name, "%p", &pointer); rc = sscanf (pointer_name, "%lx", &ptr);
if ((rc != EOF) && (rc != 0)) if ((rc != EOF) && (rc != 0))
{ {
pointer = (void *)ptr;
if (!hdata_check_pointer (hdata, NULL, pointer)) if (!hdata_check_pointer (hdata, NULL, pointer))
goto end; goto end;
} }
+3 -3
View File
@@ -1246,10 +1246,10 @@ hdata_set (struct t_hdata *hdata, void *pointer, const char *name,
const char *value) const char *value)
{ {
struct t_hdata_var *var; struct t_hdata_var *var;
void *ptr;
char **ptr_string, *error; char **ptr_string, *error;
long number; long number;
long long number_longlong; long long number_longlong;
unsigned long ptr;
int rc; int rc;
if (!hdata->update_pending) if (!hdata->update_pending)
@@ -1309,10 +1309,10 @@ hdata_set (struct t_hdata *hdata, void *pointer, const char *name,
case WEECHAT_HDATA_POINTER: case WEECHAT_HDATA_POINTER:
if (value) if (value)
{ {
rc = sscanf (value, "%p", &ptr); rc = sscanf (value, "%lx", &ptr);
if ((rc != EOF) && (rc != 0)) if ((rc != EOF) && (rc != 0))
{ {
*((void **)(pointer + var->offset)) = ptr; *((void **)(pointer + var->offset)) = (void *)ptr;
return 1; return 1;
} }
} }
+5 -2
View File
@@ -2150,6 +2150,7 @@ gui_bar_item_focus_buffer_nicklist_cb (const void *pointer,
struct t_gui_nick_group *ptr_group; struct t_gui_nick_group *ptr_group;
struct t_gui_nick *ptr_nick; struct t_gui_nick *ptr_nick;
int i, rc, bar_item_line; int i, rc, bar_item_line;
unsigned long value;
const char *str_window, *str_buffer, *str_bar_item_line; const char *str_window, *str_buffer, *str_bar_item_line;
struct t_gui_window *window; struct t_gui_window *window;
struct t_gui_buffer *buffer; struct t_gui_buffer *buffer;
@@ -2167,9 +2168,10 @@ gui_bar_item_focus_buffer_nicklist_cb (const void *pointer,
str_window = hashtable_get (info, "_window"); str_window = hashtable_get (info, "_window");
if (str_window && str_window[0]) if (str_window && str_window[0])
{ {
rc = sscanf (str_window, "%p", &window); rc = sscanf (str_window, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return NULL; return NULL;
window = (struct t_gui_window *)value;
} }
else else
{ {
@@ -2184,9 +2186,10 @@ gui_bar_item_focus_buffer_nicklist_cb (const void *pointer,
str_buffer = hashtable_get (info, "_buffer"); str_buffer = hashtable_get (info, "_buffer");
if (str_buffer && str_buffer[0]) if (str_buffer && str_buffer[0])
{ {
rc = sscanf (str_buffer, "%p", &buffer); rc = sscanf (str_buffer, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return NULL; return NULL;
buffer = (struct t_gui_buffer *)value;
} }
if (!buffer) if (!buffer)
return NULL; return NULL;
+3 -1
View File
@@ -1398,6 +1398,7 @@ gui_chat_hsignal_quote_line_cb (const void *pointer, void *data,
{ {
const char *ptr_date, *ptr_date_usec, *line, *prefix, *ptr_prefix, *message; const char *ptr_date, *ptr_date_usec, *line, *prefix, *ptr_prefix, *message;
long long number; long long number;
unsigned long value;
struct timeval tv; struct timeval tv;
struct t_gui_line *ptr_line; struct t_gui_line *ptr_line;
int is_nick, rc; int is_nick, rc;
@@ -1442,9 +1443,10 @@ gui_chat_hsignal_quote_line_cb (const void *pointer, void *data,
line = hashtable_get (hashtable, "_chat_line"); line = hashtable_get (hashtable, "_chat_line");
if (line && line[0]) if (line && line[0])
{ {
rc = sscanf (line, "%p", &ptr_line); rc = sscanf (line, "%lx", &value);
if ((rc != EOF) && (rc != 0)) if ((rc != EOF) && (rc != 0))
{ {
ptr_line = (struct t_gui_line *)value;
if (gui_line_search_tag_starting_with (ptr_line, "prefix_nick")) if (gui_line_search_tag_starting_with (ptr_line, "prefix_nick"))
is_nick = 1; is_nick = 1;
} }
+4 -3
View File
@@ -358,6 +358,7 @@ gui_history_hdata_history_update_cb (void *data,
struct t_gui_history *ptr_history; struct t_gui_history *ptr_history;
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
const char *text, *buffer; const char *text, *buffer;
unsigned long value;
int rc; int rc;
/* make C compiler happy */ /* make C compiler happy */
@@ -386,9 +387,9 @@ gui_history_hdata_history_update_cb (void *data,
buffer = hashtable_get (hashtable, "buffer"); buffer = hashtable_get (hashtable, "buffer");
if (buffer) if (buffer)
{ {
rc = sscanf (buffer, "%p", &ptr_buffer); rc = sscanf (buffer, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc != EOF) && (rc != 0))
ptr_buffer = NULL; ptr_buffer = (struct t_gui_buffer *)value;
} }
} }
if (ptr_buffer) if (ptr_buffer)
+4 -3
View File
@@ -2044,6 +2044,7 @@ gui_key_focus_command (const char *key, int context,
{ {
struct t_gui_key *ptr_key; struct t_gui_key *ptr_key;
int matching, debug, rc; int matching, debug, rc;
unsigned long value;
char *command, **commands, **ptr_command; char *command, **commands, **ptr_command;
const char *str_buffer; const char *str_buffer;
struct t_hashtable *hashtable; struct t_hashtable *hashtable;
@@ -2101,9 +2102,9 @@ gui_key_focus_command (const char *key, int context,
str_buffer = hashtable_get (hashtable, "_buffer"); str_buffer = hashtable_get (hashtable, "_buffer");
if (str_buffer && str_buffer[0]) if (str_buffer && str_buffer[0])
{ {
rc = sscanf (str_buffer, "%p", &ptr_buffer); rc = sscanf (str_buffer, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc != EOF) && (rc != 0))
ptr_buffer = gui_current_window->buffer; ptr_buffer = (struct t_gui_buffer *)value;
} }
if (!ptr_buffer) if (!ptr_buffer)
continue; continue;
+3 -1
View File
@@ -1673,6 +1673,7 @@ gui_line_hook_update (struct t_gui_line *line,
{ {
const char *ptr_value, *ptr_value2; const char *ptr_value, *ptr_value2;
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
unsigned long value_pointer;
long value; long value;
char *error, *new_message, *pos_newline; char *error, *new_message, *pos_newline;
int rc, tags_updated, notify_level_updated, highlight_updated; int rc, tags_updated, notify_level_updated, highlight_updated;
@@ -1706,7 +1707,8 @@ gui_line_hook_update (struct t_gui_line *line,
{ {
if ((ptr_value2[0] == '0') && (ptr_value2[1] == 'x')) if ((ptr_value2[0] == '0') && (ptr_value2[1] == 'x'))
{ {
rc = sscanf (ptr_value2, "%p", &ptr_buffer); rc = sscanf (ptr_value2 + 2, "%lx", &value_pointer);
ptr_buffer = (struct t_gui_buffer *)value_pointer;
if ((rc != EOF) && (rc >= 1) if ((rc != EOF) && (rc >= 1)
&& gui_chat_buffer_valid (ptr_buffer, line->data->buffer->type)) && gui_chat_buffer_valid (ptr_buffer, line->data->buffer->type))
{ {
+3 -1
View File
@@ -335,6 +335,7 @@ buflist_hsignal_cb (const void *pointer, void *data, const char *signal,
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
char *error, str_command[1024]; char *error, str_command[1024];
long number, number2; long number, number2;
unsigned long value;
int rc, current_buffer_number; int rc, current_buffer_number;
/* make C compiler happy */ /* make C compiler happy */
@@ -354,9 +355,10 @@ buflist_hsignal_cb (const void *pointer, void *data, const char *signal,
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
} }
rc = sscanf (ptr_pointer, "%p", &ptr_buffer); rc = sscanf (ptr_pointer, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
ptr_buffer = (struct t_gui_buffer *)value;
error = NULL; error = NULL;
number = strtol (ptr_number, &error, 10); number = strtol (ptr_number, &error, 10);
+7 -2
View File
@@ -43,6 +43,7 @@ fset_mouse_focus_cb (const void *pointer, void *data, struct t_hashtable *info)
{ {
const char *buffer; const char *buffer;
int rc, format_number; int rc, format_number;
unsigned long value;
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
long y, option_index; long y, option_index;
char *error, str_value[128]; char *error, str_value[128];
@@ -59,10 +60,12 @@ fset_mouse_focus_cb (const void *pointer, void *data, struct t_hashtable *info)
if (!buffer) if (!buffer)
return info; return info;
rc = sscanf (buffer, "%p", &ptr_buffer); rc = sscanf (buffer, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return info; return info;
ptr_buffer = (struct t_gui_buffer *)value;
if (!ptr_buffer || (ptr_buffer != fset_buffer)) if (!ptr_buffer || (ptr_buffer != fset_buffer))
return info; return info;
@@ -186,6 +189,7 @@ fset_mouse_hsignal_cb (const void *pointer, void *data, const char *signal,
const char *ptr_key, *ptr_fset_option_pointer; const char *ptr_key, *ptr_fset_option_pointer;
char str_command[1024]; char str_command[1024];
struct t_fset_option *ptr_fset_option; struct t_fset_option *ptr_fset_option;
unsigned long value;
int rc, distance, num_options, min_y, max_y, i; int rc, distance, num_options, min_y, max_y, i;
int chat_line_x, chat_line_x2, y, y2, chat_line_y, chat_line_y2; int chat_line_x, chat_line_x2, y, y2, chat_line_y, chat_line_y2;
int option_index, option_index2, index1, index2; int option_index, option_index2, index1, index2;
@@ -204,9 +208,10 @@ fset_mouse_hsignal_cb (const void *pointer, void *data, const char *signal,
if (!ptr_key || !ptr_fset_option_pointer) if (!ptr_key || !ptr_fset_option_pointer)
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
rc = sscanf (ptr_fset_option_pointer, "%p", &ptr_fset_option); rc = sscanf (ptr_fset_option_pointer, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
ptr_fset_option = (struct t_fset_option *)value;
if (!ptr_fset_option) if (!ptr_fset_option)
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
+4 -1
View File
@@ -626,6 +626,7 @@ struct t_hashtable *
irc_bar_item_focus_buffer_nicklist (const void *pointer, void *data, irc_bar_item_focus_buffer_nicklist (const void *pointer, void *data,
struct t_hashtable *info) struct t_hashtable *info)
{ {
unsigned long value;
int rc; int rc;
struct t_gui_buffer *buffer; struct t_gui_buffer *buffer;
struct t_irc_nick *ptr_nick; struct t_irc_nick *ptr_nick;
@@ -636,10 +637,12 @@ irc_bar_item_focus_buffer_nicklist (const void *pointer, void *data,
if (!str_buffer || !str_buffer[0]) if (!str_buffer || !str_buffer[0])
return NULL; return NULL;
rc = sscanf (str_buffer, "%p", &buffer); rc = sscanf (str_buffer, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return NULL; return NULL;
buffer = (struct t_gui_buffer *)value;
IRC_BUFFER_GET_SERVER_CHANNEL(buffer); IRC_BUFFER_GET_SERVER_CHANNEL(buffer);
/* make C compiler happy */ /* make C compiler happy */
+3 -1
View File
@@ -1313,6 +1313,7 @@ irc_list_mouse_hsignal_cb (const void *pointer, void *data, const char *signal,
{ {
const char *ptr_key, *ptr_chat_line_y, *ptr_buffer_pointer; const char *ptr_key, *ptr_chat_line_y, *ptr_buffer_pointer;
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
unsigned long value;
char str_command[1024]; char str_command[1024];
int rc; int rc;
@@ -1328,9 +1329,10 @@ irc_list_mouse_hsignal_cb (const void *pointer, void *data, const char *signal,
if (!ptr_key || !ptr_buffer_pointer || !ptr_chat_line_y) if (!ptr_key || !ptr_buffer_pointer || !ptr_chat_line_y)
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
rc = sscanf (ptr_buffer_pointer, "%p", &ptr_buffer); rc = sscanf (ptr_buffer_pointer, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
ptr_buffer = (struct t_gui_buffer *)value;
if (!ptr_buffer) if (!ptr_buffer)
return WEECHAT_RC_OK; return WEECHAT_RC_OK;
+7 -10
View File
@@ -40,6 +40,7 @@ logger_info_log_file_cb (const void *pointer, void *data,
const char *arguments) const char *arguments)
{ {
int rc; int rc;
unsigned long value;
struct t_gui_buffer *buffer; struct t_gui_buffer *buffer;
struct t_logger_buffer *logger_buffer; struct t_logger_buffer *logger_buffer;
@@ -54,20 +55,16 @@ logger_info_log_file_cb (const void *pointer, void *data,
buffer = NULL; buffer = NULL;
if (strncmp (arguments, "0x", 2) == 0) if (strncmp (arguments, "0x", 2) == 0)
{ {
rc = sscanf (arguments, "%p", &buffer); rc = sscanf (arguments, "%lx", &value);
if ((rc != EOF) && (rc != 0) && buffer) if ((rc != EOF) && (rc != 0) && value)
{ {
if (!weechat_hdata_check_pointer (weechat_hdata_get ("buffer"), if (weechat_hdata_check_pointer (weechat_hdata_get ("buffer"),
NULL, NULL,
buffer)) (struct t_gui_buffer *)value))
{ {
buffer = NULL; buffer = (struct t_gui_buffer *)value;
} }
} }
else
{
buffer = NULL;
}
} }
else else
{ {
+3 -3
View File
@@ -407,7 +407,7 @@ plugin_script_str2ptr (struct t_weechat_plugin *weechat_plugin,
const char *script_name, const char *function_name, const char *script_name, const char *function_name,
const char *str_pointer) const char *str_pointer)
{ {
void *pointer; unsigned long value;
int rc; int rc;
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
@@ -417,9 +417,9 @@ plugin_script_str2ptr (struct t_weechat_plugin *weechat_plugin,
if ((str_pointer[0] != '0') || (str_pointer[1] != 'x')) if ((str_pointer[0] != '0') || (str_pointer[1] != 'x'))
goto invalid; goto invalid;
rc = sscanf (str_pointer, "%p", &pointer); rc = sscanf (str_pointer + 2, "%lx", &value);
if ((rc != EOF) && (rc >= 1)) if ((rc != EOF) && (rc >= 1))
return pointer; return (void *)value;
invalid: invalid:
if ((weechat_plugin->debug >= 1) && script_name && function_name) if ((weechat_plugin->debug >= 1) && script_name && function_name)
+4 -1
View File
@@ -268,6 +268,7 @@ relay_modifier_input_text_display_cb (const void *pointer,
{ {
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
struct t_relay_remote *ptr_remote; struct t_relay_remote *ptr_remote;
unsigned long value;
const char *ptr_input, *ptr_text_local, *ptr_text_remote; const char *ptr_input, *ptr_text_local, *ptr_text_remote;
char *text, *new_input; char *text, *new_input;
int rc, input_get_any_user_data; int rc, input_get_any_user_data;
@@ -283,10 +284,12 @@ relay_modifier_input_text_display_cb (const void *pointer,
if (!relay_remotes) if (!relay_remotes)
return NULL; return NULL;
rc = sscanf (modifier_data, "%p", &ptr_buffer); rc = sscanf (modifier_data, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return NULL; return NULL;
ptr_buffer = (struct t_gui_buffer *)value;
if (weechat_buffer_get_pointer (ptr_buffer, "plugin") != weechat_plugin) if (weechat_buffer_get_pointer (ptr_buffer, "plugin") != weechat_plugin)
return NULL; return NULL;
@@ -590,6 +590,7 @@ relay_weechat_msg_add_hdata (struct t_relay_weechat_msg *msg,
char *path_returned; char *path_returned;
const char *hdata_name, *array_size; const char *hdata_name, *array_size;
void *pointer, **path_pointers; void *pointer, **path_pointers;
unsigned long value;
int rc, num_keys, num_path, i, type, pos_count, count, rc_sscanf; int rc, num_keys, num_path, i, type, pos_count, count, rc_sscanf;
uint32_t count32; uint32_t count32;
@@ -630,9 +631,10 @@ relay_weechat_msg_add_hdata (struct t_relay_weechat_msg *msg,
pos[0] = '\0'; pos[0] = '\0';
if (strncmp (list_path[0], "0x", 2) == 0) if (strncmp (list_path[0], "0x", 2) == 0)
{ {
rc_sscanf = sscanf (list_path[0], "%p", &pointer); rc_sscanf = sscanf (list_path[0], "%lx", &value);
if ((rc_sscanf != EOF) && (rc_sscanf != 0)) if ((rc_sscanf != EOF) && (rc_sscanf != 0))
{ {
pointer = (void *)value;
if (!weechat_hdata_check_pointer (ptr_hdata_head, NULL, pointer)) if (!weechat_hdata_check_pointer (ptr_hdata_head, NULL, pointer))
{ {
if (weechat_relay_plugin->debug >= 1) if (weechat_relay_plugin->debug >= 1)
@@ -646,10 +648,6 @@ relay_weechat_msg_add_hdata (struct t_relay_weechat_msg *msg,
goto end; goto end;
} }
} }
else
{
pointer = NULL;
}
} }
else else
pointer = weechat_hdata_get_list (ptr_hdata_head, list_path[0]); pointer = weechat_hdata_get_list (ptr_hdata_head, list_path[0]);
@@ -51,14 +51,17 @@ struct t_gui_buffer *
relay_weechat_protocol_get_buffer (const char *arg) relay_weechat_protocol_get_buffer (const char *arg)
{ {
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
unsigned long value;
int rc; int rc;
ptr_buffer = NULL; ptr_buffer = NULL;
if (strncmp (arg, "0x", 2) == 0) if (strncmp (arg, "0x", 2) == 0)
{ {
rc = sscanf (arg, "%p", &ptr_buffer); rc = sscanf (arg, "%lx", &value);
if ((rc != EOF) && (rc != 0) && ptr_buffer) if ((rc != EOF) && (rc != 0))
ptr_buffer = (struct t_gui_buffer *)value;
if (ptr_buffer)
{ {
if (!weechat_hdata_check_pointer ( if (!weechat_hdata_check_pointer (
relay_hdata_buffer, relay_hdata_buffer,
@@ -69,10 +72,6 @@ relay_weechat_protocol_get_buffer (const char *arg)
ptr_buffer = NULL; ptr_buffer = NULL;
} }
} }
else
{
ptr_buffer = NULL;
}
} }
else else
ptr_buffer = weechat_buffer_search ("==", arg); ptr_buffer = weechat_buffer_search ("==", arg);
@@ -529,7 +528,7 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(info)
RELAY_WEECHAT_PROTOCOL_CALLBACK(infolist) RELAY_WEECHAT_PROTOCOL_CALLBACK(infolist)
{ {
struct t_relay_weechat_msg *msg; struct t_relay_weechat_msg *msg;
void *pointer; unsigned long value;
char *args; char *args;
int rc; int rc;
@@ -538,17 +537,17 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(infolist)
msg = relay_weechat_msg_new (id); msg = relay_weechat_msg_new (id);
if (msg) if (msg)
{ {
pointer = NULL; value = 0;
args = NULL; args = NULL;
if (argc > 1) if (argc > 1)
{ {
rc = sscanf (argv[1], "%p", &pointer); rc = sscanf (argv[1], "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
pointer = NULL; value = 0;
if (argc > 2) if (argc > 2)
args = argv_eol[2]; args = argv_eol[2];
} }
relay_weechat_msg_add_infolist (msg, argv[0], pointer, args); relay_weechat_msg_add_infolist (msg, argv[0], (void *)value, args);
relay_weechat_msg_send (client, msg); relay_weechat_msg_send (client, msg);
relay_weechat_msg_free (msg); relay_weechat_msg_free (msg);
} }
+4 -1
View File
@@ -41,6 +41,7 @@ script_mouse_focus_chat_cb (const void *pointer, void *data,
{ {
const char *buffer; const char *buffer;
int rc; int rc;
unsigned long value;
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
long x; long x;
char *error, str_date[64]; char *error, str_date[64];
@@ -58,10 +59,12 @@ script_mouse_focus_chat_cb (const void *pointer, void *data,
if (!buffer) if (!buffer)
return info; return info;
rc = sscanf (buffer, "%p", &ptr_buffer); rc = sscanf (buffer, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return info; return info;
ptr_buffer = (struct t_gui_buffer *)value;
if (!ptr_buffer || (ptr_buffer != script_buffer)) if (!ptr_buffer || (ptr_buffer != script_buffer))
return info; return info;
+4 -2
View File
@@ -39,6 +39,7 @@ spell_info_info_spell_dict_cb (const void *pointer, void *data,
const char *arguments) const char *arguments)
{ {
int rc; int rc;
unsigned long value;
struct t_gui_buffer *buffer; struct t_gui_buffer *buffer;
const char *buffer_full_name, *ptr_dict; const char *buffer_full_name, *ptr_dict;
@@ -55,9 +56,10 @@ spell_info_info_spell_dict_cb (const void *pointer, void *data,
buffer_full_name = NULL; buffer_full_name = NULL;
if (strncmp (arguments, "0x", 2) == 0) if (strncmp (arguments, "0x", 2) == 0)
{ {
rc = sscanf (arguments, "%p", &buffer); rc = sscanf (arguments, "%lx", &value);
if ((rc != EOF) && (rc != 0) && buffer) if ((rc != EOF) && (rc != 0) && value)
{ {
buffer = (struct t_gui_buffer *)value;
if (weechat_hdata_check_pointer (weechat_hdata_get ("buffer"), if (weechat_hdata_check_pointer (weechat_hdata_get ("buffer"),
NULL, buffer)) NULL, buffer))
{ {
+4 -1
View File
@@ -715,6 +715,7 @@ spell_modifier_cb (const void *pointer, void *data,
const char *modifier, const char *modifier,
const char *modifier_data, const char *string) const char *modifier_data, const char *string)
{ {
unsigned long value;
struct t_gui_buffer *buffer; struct t_gui_buffer *buffer;
struct t_spell_speller_buffer *ptr_speller_buffer; struct t_spell_speller_buffer *ptr_speller_buffer;
char **result, *ptr_string, *ptr_string_orig, *pos_space; char **result, *ptr_string, *ptr_string_orig, *pos_space;
@@ -737,10 +738,12 @@ spell_modifier_cb (const void *pointer, void *data,
if (!string) if (!string)
return NULL; return NULL;
rc = sscanf (modifier_data, "%p", &buffer); rc = sscanf (modifier_data, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return NULL; return NULL;
buffer = (struct t_gui_buffer *)value;
/* check text during search only if option is enabled */ /* check text during search only if option is enabled */
if (weechat_buffer_get_integer (buffer, "text_search") if (weechat_buffer_get_integer (buffer, "text_search")
&& !weechat_config_boolean (spell_config_check_during_search)) && !weechat_config_boolean (spell_config_check_during_search))
+11 -11
View File
@@ -813,9 +813,9 @@ trigger_callback_modifier_cb (const void *pointer, void *data,
const char *ptr_string; const char *ptr_string;
char *string_modified, *pos, *buffer_pointer; char *string_modified, *pos, *buffer_pointer;
char *str_tags, **tags, *prefix, *string_no_color; char *str_tags, **tags, *prefix, *string_no_color;
unsigned long value;
int num_tags, rc; int num_tags, rc;
void *ptr_irc_server, *ptr_irc_channel; void *ptr_irc_server, *ptr_irc_channel;
struct t_gui_buffer *ptr_buffer;
TRIGGER_CALLBACK_CB_INIT(NULL); TRIGGER_CALLBACK_CB_INIT(NULL);
@@ -928,10 +928,10 @@ trigger_callback_modifier_cb (const void *pointer, void *data,
pos - modifier_data); pos - modifier_data);
if (buffer_pointer) if (buffer_pointer)
{ {
rc = sscanf (buffer_pointer, "%p", &ptr_buffer); rc = sscanf (buffer_pointer, "%lx", &value);
if ((rc != EOF) && (rc != 0)) if ((rc != EOF) && (rc != 0))
{ {
ctx.buffer = ptr_buffer; ctx.buffer = (struct t_gui_buffer *)value;
weechat_hashtable_set ( weechat_hashtable_set (
ctx.extra_vars, ctx.extra_vars,
"tg_plugin", "tg_plugin",
@@ -999,7 +999,7 @@ trigger_callback_line_cb (const void *pointer, void *data,
{ {
struct t_hashtable *hashtable; struct t_hashtable *hashtable;
struct t_weelist_item *ptr_item; struct t_weelist_item *ptr_item;
void *ptr; unsigned long value;
const char *ptr_key, *ptr_value; const char *ptr_key, *ptr_value;
char **tags, *str_tags, *string_no_color; char **tags, *str_tags, *string_no_color;
int rc, num_tags; int rc, num_tags;
@@ -1023,10 +1023,10 @@ trigger_callback_line_cb (const void *pointer, void *data,
ptr_value = weechat_hashtable_get (line, "buffer"); ptr_value = weechat_hashtable_get (line, "buffer");
if (!ptr_value || (ptr_value[0] != '0') || (ptr_value[1] != 'x')) if (!ptr_value || (ptr_value[0] != '0') || (ptr_value[1] != 'x'))
goto end; goto end;
rc = sscanf (ptr_value, "%p", &ptr); rc = sscanf (ptr_value + 2, "%lx", &value);
if ((rc == EOF) || (rc < 1)) if ((rc == EOF) || (rc < 1))
goto end; goto end;
ctx.buffer = ptr; ctx.buffer = (void *)value;
weechat_hashtable_set (ctx.pointers, "buffer", ctx.buffer); weechat_hashtable_set (ctx.pointers, "buffer", ctx.buffer);
ptr_value = weechat_hashtable_get (line, "tags"); ptr_value = weechat_hashtable_get (line, "tags");
@@ -1363,7 +1363,7 @@ trigger_callback_focus_cb (const void *pointer, void *data,
struct t_hashtable *info) struct t_hashtable *info)
{ {
const char *ptr_value; const char *ptr_value;
void *ptr; unsigned long value;
int rc; int rc;
TRIGGER_CALLBACK_CB_INIT(info); TRIGGER_CALLBACK_CB_INIT(info);
@@ -1377,16 +1377,16 @@ trigger_callback_focus_cb (const void *pointer, void *data,
ptr_value = weechat_hashtable_get (info, "_window"); ptr_value = weechat_hashtable_get (info, "_window");
if (ptr_value && ptr_value[0] && (strncmp (ptr_value, "0x", 2) == 0)) if (ptr_value && ptr_value[0] && (strncmp (ptr_value, "0x", 2) == 0))
{ {
rc = sscanf (ptr_value, "%p", &ptr); rc = sscanf (ptr_value + 2, "%lx", &value);
if ((rc != EOF) && (rc >= 1)) if ((rc != EOF) && (rc >= 1))
weechat_hashtable_set (ctx.pointers, "window", ptr); weechat_hashtable_set (ctx.pointers, "window", (void *)value);
} }
ptr_value = weechat_hashtable_get (info, "_buffer"); ptr_value = weechat_hashtable_get (info, "_buffer");
if (ptr_value && ptr_value[0] && (strncmp (ptr_value, "0x", 2) == 0)) if (ptr_value && ptr_value[0] && (strncmp (ptr_value, "0x", 2) == 0))
{ {
rc = sscanf (ptr_value, "%p", &ptr); rc = sscanf (ptr_value + 2, "%lx", &value);
if ((rc != EOF) && (rc >= 1)) if ((rc != EOF) && (rc >= 1))
weechat_hashtable_set (ctx.pointers, "buffer", ptr); weechat_hashtable_set (ctx.pointers, "buffer", (void *)value);
} }
/* execute the trigger (conditions, regex, command) */ /* execute the trigger (conditions, regex, command) */
+6 -2
View File
@@ -183,6 +183,7 @@ typing_input_text_for_buffer_modifier_cb (const void *pointer,
const char *string) const char *string)
{ {
int rc, text_search; int rc, text_search;
unsigned long value;
const char *ptr_input_for_buffer; const char *ptr_input_for_buffer;
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
struct t_typing_status *ptr_typing_status; struct t_typing_status *ptr_typing_status;
@@ -193,9 +194,10 @@ typing_input_text_for_buffer_modifier_cb (const void *pointer,
(void) modifier; (void) modifier;
(void) string; (void) string;
rc = sscanf (modifier_data, "%p", &ptr_buffer); rc = sscanf (modifier_data, "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
return NULL; return NULL;
ptr_buffer = (struct t_gui_buffer *)value;
/* ignore any change in input if the user is searching text in the buffer */ /* ignore any change in input if the user is searching text in the buffer */
text_search = weechat_buffer_get_integer (ptr_buffer, "text_search"); text_search = weechat_buffer_get_integer (ptr_buffer, "text_search");
@@ -382,6 +384,7 @@ typing_typing_set_nick_signal_cb (const void *pointer, void *data,
{ {
char **items; char **items;
int num_items, rc, state, updated; int num_items, rc, state, updated;
unsigned long value;
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
struct t_typing_status *ptr_typing_status; struct t_typing_status *ptr_typing_status;
@@ -396,9 +399,10 @@ typing_typing_set_nick_signal_cb (const void *pointer, void *data,
if (!items || (num_items != 3)) if (!items || (num_items != 3))
goto end; goto end;
rc = sscanf (items[0], "%p", &ptr_buffer); rc = sscanf (items[0], "%lx", &value);
if ((rc == EOF) || (rc == 0)) if ((rc == EOF) || (rc == 0))
goto end; goto end;
ptr_buffer = (struct t_gui_buffer *)value;
if (!ptr_buffer) if (!ptr_buffer)
goto end; goto end;
+4 -1
View File
@@ -63,6 +63,7 @@ test_modifier_cb (const void *pointer, void *data,
char **items, *new_string; char **items, *new_string;
const char *ptr_plugin, *ptr_tags, *ptr_msg; const char *ptr_plugin, *ptr_tags, *ptr_msg;
int num_items, length, rc; int num_items, length, rc;
unsigned long value;
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
/* make C++ compiler happy */ /* make C++ compiler happy */
@@ -83,10 +84,12 @@ test_modifier_cb (const void *pointer, void *data,
ptr_tags = (num_items >= 2) ? items[1] : NULL; 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)) if ((rc == EOF) || (rc == 0))
goto error; goto error;
ptr_buffer = (struct t_gui_buffer *)value;
ptr_plugin = gui_buffer_get_plugin_name (ptr_buffer); ptr_plugin = gui_buffer_get_plugin_name (ptr_buffer);
if (!ptr_plugin) if (!ptr_plugin)
goto error; goto error;
-1
View File
@@ -1037,7 +1037,6 @@ TEST(CoreEval, EvalExpression)
WEE_CHECK_EVAL("", "${buffer[].full_name}"); WEE_CHECK_EVAL("", "${buffer[].full_name}");
WEE_CHECK_EVAL("", "${buffer[0x0].full_name}"); WEE_CHECK_EVAL("", "${buffer[0x0].full_name}");
WEE_CHECK_EVAL("", "${buffer[0x1].full_name}"); WEE_CHECK_EVAL("", "${buffer[0x1].full_name}");
WEE_CHECK_EVAL("", "${buffer[0xZ].full_name}");
WEE_CHECK_EVAL("", "${buffer[unknown_list].full_name}"); WEE_CHECK_EVAL("", "${buffer[unknown_list].full_name}");
WEE_CHECK_EVAL("", "${unknown_pointer}"); WEE_CHECK_EVAL("", "${unknown_pointer}");
WEE_CHECK_EVAL("", "${my_null_pointer}"); WEE_CHECK_EVAL("", "${my_null_pointer}");