e_info: fixed out of range error due to the signed integer type. 21/126221/1
authorGwanglim Lee <gl77.lee@samsung.com>
Thu, 20 Apr 2017 12:33:51 +0000 (21:33 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Thu, 20 Apr 2017 12:46:24 +0000 (21:46 +0900)
Change-Id: I88aa6dfad7cf8901bb05445751ecba9ddc34a947

src/bin/e_info_client.c
src/bin/e_info_server.c

index ced235a95075d8f39c378a5982d1c36241696e8e..e53f4d04b39676a3697e852fbe6aac249ba0f395 100644 (file)
@@ -83,24 +83,23 @@ static Eina_Bool _e_info_client_eldbus_message_with_args(const char *method, E_I
 static void _e_info_client_eldbus_message_cb(void *data, const Eldbus_Message *msg, Eldbus_Pending *p);
 
 static Eina_Bool
-_util_string_to_int(const char *str, int *num, int base)
+_util_string_to_uint(const char *str, unsigned int *num, int base)
 {
    char *end;
    int errsv;
 
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(str, EINA_FALSE);
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(num, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(num, EINA_FALSE);
 
-   const long sl = strtol(str, &end, base);
+   const unsigned long int ul = strtol(str, &end, base);
    errsv = errno;
 
    EINA_SAFETY_ON_TRUE_RETURN_VAL((end == str), EINA_FALSE); /* given string is not a decimal number */
    EINA_SAFETY_ON_TRUE_RETURN_VAL(('\0' != *end), EINA_FALSE); /* given string has extra characters */
-   EINA_SAFETY_ON_TRUE_RETURN_VAL(((LONG_MIN == sl || LONG_MAX == sl) && (ERANGE == errsv)), EINA_FALSE); /* out of range of type long */
-   EINA_SAFETY_ON_TRUE_RETURN_VAL((sl > INT_MAX), EINA_FALSE); /* greater than INT_MAX */
-   EINA_SAFETY_ON_TRUE_RETURN_VAL((sl < INT_MIN), EINA_FALSE); /* less than INT_MIN */
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(((ULONG_MAX == ul) && (ERANGE == errsv)), EINA_FALSE); /* out of range of type unsigned long int */
+   EINA_SAFETY_ON_TRUE_RETURN_VAL((ul > UINT_MAX), EINA_FALSE); /* greater than UINT_MAX */
 
-   *num = (int)sl;
+   *num = (unsigned int)ul;
 
    return EINA_TRUE;
 }
@@ -118,7 +117,7 @@ _util_string_to_int_token(const char *str, char **next, int *num, int base)
    EINA_SAFETY_ON_NULL_RETURN_VAL(next, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(num, EINA_FALSE);
 
-   const long sl = strtol(str, next, base);
+   const long int sl = strtol(str, next, base);
    errsv = errno;
 
    EINA_SAFETY_ON_TRUE_RETURN_VAL((*next == str), EINA_FALSE); /* given string is not a decimal number */
@@ -1831,15 +1830,15 @@ _e_info_client_proc_slot_set(int argc, char **argv)
        mode == E_INFO_CMD_MESSAGE_DEL_EC)
      {
         value = argv[4];
-        int32_t value_number;
+        uint32_t value_number;
         if (strlen(value) >= 2 && value[0] == '0' && value[1] == 'x')
-          res = _util_string_to_int(value, &value_number, 16);
+          res = _util_string_to_uint(value, &value_number, 16);
         else
-          res = _util_string_to_int(value, &value_number, 10);
+          res = _util_string_to_uint(value, &value_number, 10);
 
         EINA_SAFETY_ON_FALSE_RETURN(res);
 
-        param[1] = value_number;
+        param[1] = (int32_t)value_number;
      }
 
    if (!_e_info_client_eldbus_message_with_args("slot_message", _cb_window_proc_slot_get, "iiiiii",
index 375e0b5db6bdf3ed159d7d1ec1e72744c6b3a48e..c863e58cdfe1a327460ae798d6b4c5ef14e8911a 100644 (file)
@@ -972,7 +972,7 @@ _msg_window_prop_append(Eldbus_Message_Iter *iter, uint32_t mode, const char *va
    Eldbus_Message_Iter *array_of_ec;
    E_Client *ec;
    Evas_Object *o;
-   int32_t value_number = 0;
+   uint32_t value_number = 0;
    Eina_Bool res = EINA_FALSE;
 
    eldbus_message_iter_arguments_append(iter, "a(ss)", &array_of_ec);
@@ -983,9 +983,9 @@ _msg_window_prop_append(Eldbus_Message_Iter *iter, uint32_t mode, const char *va
         else
           {
              if (strlen(value) >= 2 && value[0] == '0' && value[1] == 'x')
-               res = e_util_string_to_int(value, &value_number, 16);
+               res = e_util_string_to_uint(value, &value_number, 16);
              else
-               res = e_util_string_to_int(value, &value_number, 10);
+               res = e_util_string_to_uint(value, &value_number, 10);
 
              EINA_SAFETY_ON_FALSE_GOTO(res, finish);
           }
@@ -1939,7 +1939,7 @@ e_info_server_cb_transform_message(const Eldbus_Service_Interface *iface EINA_UN
    uint32_t x, y, sx, sy, degree;
    uint32_t background;
    const char *value = NULL;
-   int32_t value_number;
+   uint32_t value_number;
    Evas_Object *o;
    E_Client *ec;
    Eina_Bool res = EINA_FALSE;
@@ -1951,9 +1951,9 @@ e_info_server_cb_transform_message(const Eldbus_Service_Interface *iface EINA_UN
      }
 
    if (strlen(value) >= 2 && value[0] == '0' && value[1] == 'x')
-     res = e_util_string_to_int(value, &value_number, 16);
+     res = e_util_string_to_uint(value, &value_number, 16);
    else
-     res = e_util_string_to_int(value, &value_number, 10);
+     res = e_util_string_to_uint(value, &value_number, 10);
 
    EINA_SAFETY_ON_FALSE_RETURN_VAL(res, reply);
 
@@ -2756,7 +2756,7 @@ e_info_server_cb_aux_message(const Eldbus_Service_Interface *iface EINA_UNUSED,
    Eldbus_Message_Iter *opt_iter;
    const char *win_str, *key, *val, *opt;
    Eina_List *options = NULL;
-   int32_t win_id = 0;
+   uint32_t win_id = 0;
    E_Client *ec;
    Evas_Object *o;
    Eina_Bool res = EINA_FALSE;
@@ -2781,7 +2781,7 @@ e_info_server_cb_aux_message(const Eldbus_Service_Interface *iface EINA_UNUSED,
         options = eina_list_append(options, str);
      }
 
-   res = e_util_string_to_int(win_str, &win_id, 16);
+   res = e_util_string_to_uint(win_str, &win_id, 16);
    EINA_SAFETY_ON_FALSE_RETURN_VAL(res, reply);
 
    for (o = evas_object_top_get(e_comp->evas); o; o = evas_object_below_get(o))