main.conf: Fix parsing of uint32_t values
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 11 Sep 2023 20:51:20 +0000 (13:51 -0700)
committerAyush Garg <ayush.garg@samsung.com>
Fri, 5 Jan 2024 13:34:04 +0000 (19:04 +0530)
Passing UINT32_MAX as int may overfollow causing errors such as:

bluetoothd[2688495]: src/main.c:parse_config_int()
General.TemporaryTimeout = 60 is out of range (> -1)

Fixes: https://github.com/bluez/bluez/issues/583#issuecomment-1713447461

src/main.c

index a523c0c..a46da21 100755 (executable)
@@ -445,9 +445,9 @@ static bool parse_config_string(GKeyFile *config, const char *group,
 
 static bool parse_config_int(GKeyFile *config, const char *group,
                                        const char *key, int *val,
-                                       int min, int max)
+                                       size_t min, size_t max)
 {
-       int tmp;
+       size_t tmp;
        char *str = NULL;
        char *endptr = NULL;
 
@@ -461,12 +461,14 @@ static bool parse_config_int(GKeyFile *config, const char *group,
        }
 
        if (tmp < min) {
-               warn("%s.%s = %d is out of range (< %d)", group, key, tmp, min);
+               warn("%s.%s = %zu is out of range (< %zu)", group, key, tmp,
+                                                                       min);
                return false;
        }
 
        if (tmp > max) {
-               warn("%s.%s = %d is out of range (> %d)", group, key, tmp, max);
+               warn("%s.%s = %zu is out of range (> %zu)", group, key, tmp,
+                                                                       max);
                return false;
        }
 
@@ -778,7 +780,7 @@ static bool parse_config_u32(GKeyFile *config, const char *group,
 {
        int tmp;
 
-       if (!parse_config_int(config, group, key, &tmp, 0, UINT32_MAX))
+       if (!parse_config_int(config, group, key, &tmp, min, max))
                return false;
 
        if (val)