1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-27 21:36:37 +02:00

core: fix integer overflow and return "unsigned long" in function util_version_number

This commit is contained in:
Sébastien Helleu
2025-05-08 18:37:47 +02:00
parent f6cace609c
commit 2bc290b6ed
13 changed files with 49 additions and 45 deletions
+9 -11
View File
@@ -629,13 +629,13 @@ util_parse_delay (const char *string_delay, unsigned long long default_factor,
* "0.3.0" ==> 196608 (== 0x00030000)
*/
int
unsigned long
util_version_number (const char *version)
{
char **items, buf[64], *error;
const char *ptr_item;
int num_items, i, version_int[4], index_buf;
long number;
int num_items, i, index_buf;
unsigned long number, values[4];
if (!version || !version[0])
return 0;
@@ -647,7 +647,7 @@ util_version_number (const char *version)
4, &num_items);
for (i = 0; i < 4; i++)
{
version_int[i] = 0;
values[i] = 0;
if (items && (i < num_items))
{
ptr_item = items[i];
@@ -667,20 +667,18 @@ util_version_number (const char *version)
if (buf[0])
{
error = NULL;
number = strtol (buf, &error, 10);
number = strtoul (buf, &error, 10);
if (error && !error[0])
{
if (number < 0)
number = 0;
else if (number > 0xFF)
if (number > 0xFF)
number = 0xFF;
version_int[i] = number;
values[i] = number;
}
}
}
}
string_free_split (items);
return (version_int[0] << 24) | (version_int[1] << 16)
| (version_int[2] << 8) | version_int[3];
return (values[0] << 24) | (values[1] << 16)
| (values[2] << 8) | values[3];
}
+1 -1
View File
@@ -48,6 +48,6 @@ extern int util_parse_delay (const char *string_delay,
unsigned long long *delay);
/* version */
extern int util_version_number (const char *version);
extern unsigned long util_version_number (const char *version);
#endif /* WEECHAT_UTIL_H */
+1 -1
View File
@@ -102,7 +102,7 @@ plugin_api_info_version_number_cb (const void *pointer, void *data,
(void) arguments;
snprintf (
version_number, sizeof (version_number), "%d",
version_number, sizeof (version_number), "%lu",
util_version_number (
(arguments && arguments[0]) ? arguments : version_get_version ()));
return strdup (version_number);
+2 -1
View File
@@ -1109,7 +1109,8 @@ script_repo_file_read (int quiet)
const char *ptr_desc;
gzFile file;
struct t_script_repo *script;
int version_number, version_ok, script_ok;
unsigned long version_number;
int version_ok, script_ok;
struct tm tm_script;
struct t_hashtable *descriptions;
+2 -2
View File
@@ -76,7 +76,7 @@ struct t_weelist_item;
* please change the date with current one; for a second change at same
* date, increment the 01, otherwise please keep 01.
*/
#define WEECHAT_PLUGIN_API_VERSION "20250507-01"
#define WEECHAT_PLUGIN_API_VERSION "20250508-01"
/* macros for defining plugin infos */
#define WEECHAT_PLUGIN_NAME(__name) \
@@ -467,7 +467,7 @@ struct t_weechat_plugin
int (*util_strftimeval) (char *string, int max, const char *format,
struct timeval *tv);
int (*util_parse_time) (const char *datetime, struct timeval *tv);
int (*util_version_number) (const char *version);
unsigned long (*util_version_number) (const char *version);
/* sorted lists */
struct t_weelist *(*list_new) (void);