1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-06 17:53:13 +02:00

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.
This commit is contained in:
Sébastien Helleu
2025-05-15 19:23:15 +02:00
parent 9783256649
commit d0c00f7db2
21 changed files with 91 additions and 63 deletions
@@ -590,6 +590,7 @@ relay_weechat_msg_add_hdata (struct t_relay_weechat_msg *msg,
char *path_returned;
const char *hdata_name, *array_size;
void *pointer, **path_pointers;
unsigned long value;
int rc, num_keys, num_path, i, type, pos_count, count, rc_sscanf;
uint32_t count32;
@@ -630,9 +631,10 @@ relay_weechat_msg_add_hdata (struct t_relay_weechat_msg *msg,
pos[0] = '\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))
{
pointer = (void *)value;
if (!weechat_hdata_check_pointer (ptr_hdata_head, NULL, pointer))
{
if (weechat_relay_plugin->debug >= 1)
@@ -646,10 +648,6 @@ relay_weechat_msg_add_hdata (struct t_relay_weechat_msg *msg,
goto end;
}
}
else
{
pointer = NULL;
}
}
else
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)
{
struct t_gui_buffer *ptr_buffer;
unsigned long value;
int rc;
ptr_buffer = NULL;
if (strncmp (arg, "0x", 2) == 0)
{
rc = sscanf (arg, "%p", &ptr_buffer);
if ((rc != EOF) && (rc != 0) && ptr_buffer)
rc = sscanf (arg, "%lx", &value);
if ((rc != EOF) && (rc != 0))
ptr_buffer = (struct t_gui_buffer *)value;
if (ptr_buffer)
{
if (!weechat_hdata_check_pointer (
relay_hdata_buffer,
@@ -69,10 +72,6 @@ relay_weechat_protocol_get_buffer (const char *arg)
ptr_buffer = NULL;
}
}
else
{
ptr_buffer = NULL;
}
}
else
ptr_buffer = weechat_buffer_search ("==", arg);
@@ -529,7 +528,7 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(info)
RELAY_WEECHAT_PROTOCOL_CALLBACK(infolist)
{
struct t_relay_weechat_msg *msg;
void *pointer;
unsigned long value;
char *args;
int rc;
@@ -538,17 +537,17 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(infolist)
msg = relay_weechat_msg_new (id);
if (msg)
{
pointer = NULL;
value = 0;
args = NULL;
if (argc > 1)
{
rc = sscanf (argv[1], "%p", &pointer);
rc = sscanf (argv[1], "%lx", &value);
if ((rc == EOF) || (rc == 0))
pointer = NULL;
value = 0;
if (argc > 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_free (msg);
}