1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-27 13:26:38 +02:00

relay: use util functions to parse integers

This commit is contained in:
Sébastien Helleu
2026-06-20 11:27:42 +02:00
parent 15f0cef09e
commit cb0a9a3c42
11 changed files with 87 additions and 104 deletions
+9 -14
View File
@@ -77,7 +77,6 @@ relay_api_protocol_signal_buffer_cb (const void *pointer, void *data,
long long buffer_id;
int nicks;
const char *ptr_id;
char *error;
/* make C compiler happy */
(void) data;
@@ -119,9 +118,7 @@ relay_api_protocol_signal_buffer_cb (const void *pointer, void *data,
ptr_buffer);
if (ptr_id)
{
error = NULL;
buffer_id = strtoll (ptr_id, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_longlong (ptr_id, 10, &buffer_id))
buffer_id = -1;
weechat_hashtable_remove (
RELAY_API_DATA(ptr_client, buffers_closing),
@@ -499,7 +496,7 @@ invalid_hash_algo:
RELAY_API_PROTOCOL_CALLBACK(version)
{
cJSON *json;
char *version, *error;
char *version;
long number;
json = cJSON_CreateObject ();
@@ -517,9 +514,7 @@ RELAY_API_PROTOCOL_CALLBACK(version)
free (version);
version = weechat_info_get ("version_number", NULL);
error = NULL;
number = strtol (version, &error, 10);
if (error && !error[0])
if (weechat_util_parse_long (version, 10, &number))
{
cJSON_AddItemToObject (json,
"weechat_version_number",
@@ -561,10 +556,9 @@ RELAY_API_PROTOCOL_CALLBACK(buffers)
struct t_gui_buffer *ptr_buffer;
struct t_gui_line *ptr_line;
struct t_gui_line_data *ptr_line_data;
long lines, lines_free, line_id;
int colors, nicks;
long lines, lines_free;
int colors, nicks, line_id;
const char *ptr_colors;
char *error;
json = NULL;
@@ -610,9 +604,10 @@ RELAY_API_PROTOCOL_CALLBACK(buffers)
{
if (client->http_req->num_path_items > 4)
{
line_id = strtol (client->http_req->path_items[4], &error, 10);
ptr_line = (error && !error[0]) ?
weechat_line_search_by_id (ptr_buffer, line_id) : NULL;
if (weechat_util_parse_int (client->http_req->path_items[4], 10, &line_id))
ptr_line = weechat_line_search_by_id (ptr_buffer, line_id);
else
ptr_line = NULL;
ptr_line_data = (ptr_line) ?
weechat_hdata_pointer (relay_hdata_line, ptr_line, "data") : NULL;
if (!ptr_line_data)
+1 -4
View File
@@ -51,7 +51,6 @@ long long
relay_api_get_buffer_id (struct t_gui_buffer *buffer)
{
const char *ptr_id;
char *error;
long long id;
if (!buffer)
@@ -61,9 +60,7 @@ relay_api_get_buffer_id (struct t_gui_buffer *buffer)
if (!ptr_id)
return -1;
error = NULL;
id = strtoll (ptr_id, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_longlong (ptr_id, 10, &id))
return -1;
return id;
@@ -113,7 +113,6 @@ long long
relay_remote_event_get_buffer_id (struct t_gui_buffer *buffer)
{
const char *ptr_id;
char *error;
long long buffer_id;
if (!buffer)
@@ -123,9 +122,7 @@ relay_remote_event_get_buffer_id (struct t_gui_buffer *buffer)
if (!ptr_id)
return -1;
error = NULL;
buffer_id = strtoll (ptr_id, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_longlong (ptr_id, 10, &buffer_id))
return -1;
return buffer_id;
+6 -12
View File
@@ -429,9 +429,8 @@ relay_irc_signal_irc_in2_cb (const void *pointer, void *data,
int
relay_irc_tag_relay_client_id (const char *tags)
{
char **argv, *error;
int result, argc, i;
long number;
char **argv;
int number, result, argc, i;
result = -1;
@@ -449,9 +448,7 @@ relay_irc_tag_relay_client_id (const char *tags)
{
if (strncmp (argv[i], "relay_client_", 13) == 0)
{
error = NULL;
number = strtol (argv[i] + 13, &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (argv[i] + 13, 10, &number))
{
result = number;
break;
@@ -1606,10 +1603,9 @@ relay_irc_recv (struct t_relay_client *client, const char *data)
const char *ptr_data, *ptr_nick_modes, *pos;
char str_time[128], str_signal[128], str_server_channel[256], *nick;
char str_param[128], *str_args, *version, str_command[128], **params;
char *password, *irc_is_channel, *info, *error, *str_cmd_lower;
char *password, *irc_is_channel, *info, *str_cmd_lower;
char modifier_data[128], *new_data, *ctcp_type, *ctcp_params, *nick_modes;
long num_params;
int i, redirect_msg;
int i, num_params, redirect_msg;
new_data = NULL;
hash_parsed = NULL;
@@ -1650,9 +1646,7 @@ relay_irc_recv (struct t_relay_client *client, const char *data)
goto end;
irc_command = weechat_hashtable_get (hash_parsed, "command");
str_num_params = weechat_hashtable_get (hash_parsed, "num_params");
error = NULL;
num_params = strtol (str_num_params, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_int (str_num_params, 10, &num_params))
num_params = 0;
if (num_params > 0)
{
+5 -11
View File
@@ -283,7 +283,7 @@ relay_auth_parse_pbkdf2 (const char *parameters,
char **salt_hexa, char **salt, int *salt_size,
int *iterations, char **hash)
{
char **argv, *error;
char **argv;
int argc;
if (salt_hexa)
@@ -329,9 +329,7 @@ relay_auth_parse_pbkdf2 (const char *parameters,
}
/* parameter 2: iterations */
error = NULL;
*iterations = (int)strtol (argv[1], &error, 10);
if (!error || error[0])
if (!weechat_util_parse_int (argv[1], 10, iterations))
*iterations = 0;
/* parameter 3: the PBKDF2 hash */
@@ -362,9 +360,7 @@ int
relay_auth_check_salt (struct t_relay_client *client,
const char *salt_hexa, const char *salt, int salt_size)
{
long number;
int time_window;
char *error;
long long number, time_window;
time_t time_now;
if (!client)
@@ -374,12 +370,10 @@ relay_auth_check_salt (struct t_relay_client *client,
{
if (!salt || (salt_size < 1))
return 0;
error = NULL;
number = strtol (salt, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_longlong (salt, 10, &number))
return 0;
time_now = time (NULL);
time_window = weechat_config_integer (relay_config_network_time_window);
time_window = (long long)weechat_config_integer (relay_config_network_time_window);
return ((number >= time_now - time_window)
&& (number <= time_now + time_window)) ? 1 : 0;
}
+36 -13
View File
@@ -652,23 +652,46 @@ relay_config_check_port_cb (const void *pointer, void *data,
struct t_config_option *option,
const char *value)
{
char *error;
long port;
struct t_relay_server *ptr_server;
int number, port;
long long new_port;
/* make C compiler happy */
(void) pointer;
(void) data;
(void) option;
error = NULL;
port = strtol (value, &error, 10);
ptr_server = relay_server_search_port ((int)port);
if (strncmp (value, "++", 2) == 0)
{
/* relative value: add to the current port */
if (!weechat_util_parse_int (value + 2, 10, &number))
return 1;
new_port = (long long)weechat_config_integer (option) + number;
}
else if (strncmp (value, "--", 2) == 0)
{
/* relative value: subtract from the current port */
if (!weechat_util_parse_int (value + 2, 10, &number))
return 1;
new_port = (long long)weechat_config_integer (option) - number;
}
else
{
/* let WeeChat display the error if value is not a valid integer */
if (!weechat_util_parse_int (value, 10, &port))
return 1;
new_port = port;
}
/* if port is out of range, let WeeChat validate and display the error */
if ((new_port < 0) || (new_port > 65535))
return 1;
ptr_server = relay_server_search_port ((int)new_port);
if (ptr_server)
{
weechat_printf (NULL, _("%s%s: error: port \"%d\" is already used"),
weechat_prefix ("error"),
RELAY_PLUGIN_NAME, (int)port);
RELAY_PLUGIN_NAME, (int)new_port);
return 0;
}
@@ -866,9 +889,8 @@ relay_config_create_option_port_path (const void *pointer, void *data,
const char *option_name,
const char *value)
{
int rc, protocol_number, ipv4, ipv6, tls, unix_socket;
char *error, *protocol, *protocol_args;
long port;
int rc, protocol_number, ipv4, ipv6, tls, unix_socket, port;
char *protocol, *protocol_args;
struct t_relay_server *ptr_server;
/* make C compiler happy */
@@ -925,9 +947,10 @@ relay_config_create_option_port_path (const void *pointer, void *data,
}
else
{
error = NULL;
port = strtol (value, &error, 10);
ptr_server = relay_server_search_port ((int)port);
if (weechat_util_parse_int (value, 10, &port))
ptr_server = relay_server_search_port (port);
else
ptr_server = NULL;
}
if (ptr_server)
{
+16 -25
View File
@@ -212,7 +212,6 @@ relay_http_get_param_long (struct t_relay_http_request *request,
long *value)
{
const char *ptr_value;
char *error;
long number;
if (!value)
@@ -223,8 +222,7 @@ relay_http_get_param_long (struct t_relay_http_request *request,
return 0;
if (ptr_value)
{
number = strtol (ptr_value, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_long (ptr_value, 10, &number))
return 0;
*value = number;
}
@@ -411,10 +409,9 @@ relay_http_parse_header (struct t_relay_http_request *request,
const char *header,
int ws_deflate_allowed)
{
char *name, *name_lower, *error, **items;
char *name, *name_lower, **items;
const char *pos, *existing_value, *ptr_value;
int i, num_items;
long number;
int i, number, num_items;
weechat_string_dyn_concat (request->raw, header, -1);
weechat_string_dyn_concat (request->raw, "\n", -1);
@@ -475,10 +472,8 @@ relay_http_parse_header (struct t_relay_http_request *request,
/* if header is "Content-Length", save the length */
if (strcmp (name_lower, "content-length") == 0)
{
error = NULL;
number = strtol (ptr_value, &error, 10);
if (error && !error[0])
request->content_length = (int)number;
if (weechat_util_parse_int (ptr_value, 10, &number))
request->content_length = number;
}
/*
@@ -606,7 +601,7 @@ relay_http_get_auth_status (struct t_relay_client *client)
{
const char *auth, *sec_websocket_protocol, *client_totp, *pos;
char *relay_password, *totp_secret, *info_totp_args, *info_totp;
char *user_pass, **protocol_array, *error;
char *user_pass, **protocol_array;
int rc, i, length, protocol_count, use_base64url, totp_ok;
long number;
@@ -626,8 +621,8 @@ relay_http_get_auth_status (struct t_relay_client *client)
rc = -4;
goto end;
}
number = strtol (client_totp, &error, 10);
if (!error || error[0] || (number < 0) || (number > 999999))
if (!weechat_util_parse_long (client_totp, 10, &number)
|| (number < 0) || (number > 999999))
{
rc = -4;
goto end;
@@ -1496,8 +1491,8 @@ relay_http_parse_response_code (struct t_relay_http_response *response,
const char *response_code)
{
const char *pos, *pos2;
char *error, *return_code;
long value;
char *return_code;
int value;
if (!response)
return 0;
@@ -1528,10 +1523,8 @@ relay_http_parse_response_code (struct t_relay_http_response *response,
if (!return_code)
goto error;
error = NULL;
value = strtol (return_code, &error, 10);
if (error && !error[0])
response->return_code = (int)value;
if (weechat_util_parse_int (return_code, 10, &value))
response->return_code = value;
free (return_code);
@@ -1566,9 +1559,9 @@ int
relay_http_parse_response_header (struct t_relay_http_response *response,
const char *header)
{
char *name, *name_lower, *error;
char *name, *name_lower;
const char *pos, *ptr_value;
long number;
int number;
/* empty line => end of headers */
if (!header || !header[0])
@@ -1608,10 +1601,8 @@ relay_http_parse_response_header (struct t_relay_http_response *response,
/* if header is "Content-Length", save the length */
if (strcmp (name_lower, "content-length") == 0)
{
error = NULL;
number = strtol (ptr_value, &error, 10);
if (error && !error[0])
response->content_length = (int)number;
if (weechat_util_parse_int (ptr_value, 10, &number))
response->content_length = number;
}
free (name);
+4 -5
View File
@@ -203,7 +203,7 @@ relay_remote_parse_url (const char *url,
int *tls, char **address, int *port)
{
const char *ptr_url, *pos;
char *str_port, *error;
char *str_port;
long number;
if (tls)
@@ -270,12 +270,11 @@ relay_remote_parse_url (const char *url,
weechat_strndup (ptr_url, pos - ptr_url) : strdup (ptr_url);
if (!str_port)
return 0;
error = NULL;
number = strtol (str_port, &error, 10);
if (error && !error[0] && (number >= 0) && (number <= 65535))
if (weechat_util_parse_long (str_port, 10, &number)
&& (number >= 0) && (number <= 65535))
{
if (port)
*port = number;
*port = (int)number;
free (str_port);
}
else
+5 -8
View File
@@ -306,9 +306,8 @@ relay_websocket_parse_extensions (const char *extensions,
struct t_relay_websocket_deflate *ws_deflate,
int ws_deflate_allowed)
{
char **exts, **params, **items, *error;
int i, j, num_exts, num_params, num_items;
long number;
char **exts, **params, **items;
int i, j, number, num_exts, num_params, num_items;
if (!extensions || !ws_deflate)
return;
@@ -351,9 +350,7 @@ relay_websocket_parse_extensions (const char *extensions,
number = 15;
if (num_items >= 2)
{
error = NULL;
number = strtol (items[1], &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (items[1], 10, &number))
{
if (number < 8)
number = 8;
@@ -368,12 +365,12 @@ relay_websocket_parse_extensions (const char *extensions,
if (strcmp (items[0], "server_max_window_bits") == 0)
{
ws_deflate->server_max_window_bits_recv = 1;
ws_deflate->window_bits_deflate = (int)number;
ws_deflate->window_bits_deflate = number;
}
else
{
ws_deflate->client_max_window_bits_recv = 1;
ws_deflate->window_bits_inflate = (int)number;
ws_deflate->window_bits_inflate = number;
}
}
}
@@ -362,7 +362,7 @@ relay_weechat_msg_add_hdata_path (struct t_relay_weechat_msg *msg,
{
int num_added, i, j, count, count_all, var_type, array_size, max_array_size;
int length;
char *pos, *pos2, *str_count, *error, *name;
char *pos, *pos2, *str_count, *name;
void *sub_pointer;
struct t_hdata *sub_hdata;
const char *sub_hdata_name;
@@ -384,9 +384,7 @@ relay_weechat_msg_add_hdata_path (struct t_relay_weechat_msg *msg,
count_all = 1;
else
{
error = NULL;
count = (int)strtol (str_count, &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (str_count, 10, &count))
{
if (count > 0)
count--;
@@ -684,7 +684,7 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(completion)
struct t_gui_completion_word *word;
struct t_arraylist *ptr_list;
struct t_relay_weechat_msg *msg;
char *error, *pos_data;
char *pos_data;
int i, position, length_data, context, pos_start, size;
RELAY_WEECHAT_PROTOCOL_MIN_ARGS(0);
@@ -709,9 +709,7 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(completion)
goto error;
}
error = NULL;
position = (int)strtol (argv[1], &error, 10);
if (!error || error[0])
if (!weechat_util_parse_int (argv[1], 10, &position))
goto error;
pos_data = strchr (argv_eol[1], ' ');