diff options
| author | Yaniv Kaul <ykaul@redhat.com> | 2018-08-24 17:24:15 +0300 | 
|---|---|---|
| committer | Amar Tumballi <amarts@redhat.com> | 2018-08-30 05:37:48 +0000 | 
| commit | d27e8870c1882b1abfffefaf7b40bc7f2a1ec05f (patch) | |
| tree | 1cc0c618ac506383ed7494e10b9d6682f3db1a4d | |
| parent | f29e46f97737d9e2d154ba0e99c5ffb1d03eaa57 (diff) | |
libglusterfs/src/dict.c: allocate memory accurately.
I suspect we've allocated and then set to '\0' an
additional byte for no reason: gf_asprintf() allocates
enough inc. the terminating null; data->len took that
additional byte into account; memcpy() it back
took care of that terminating null byte as well.
Also, unrelated, implemented str_to_data() via
strn_to_data().
Compile-tested only!
updates: bz#1193929
Signed-off-by: Yaniv Kaul <ykaul@redhat.com>
Change-Id: I32c90e12974f51a0fbc0cfaebf9bd0fd722adc11
| -rw-r--r-- | libglusterfs/src/dict.c | 31 | 
1 files changed, 8 insertions, 23 deletions
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index 57be4e76d63..b69f0e79a47 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -1018,18 +1018,8 @@ str_to_data (char *value)                                    LG_MSG_INVALID_ARG, "value is NULL");                  return NULL;          } -        data_t *data = get_new_data (); - -        if (!data) { -                return NULL; -        } -        data->len = strlen (value) + 1; -        data->data_type = GF_DATA_TYPE_STR; - -        data->data = value; -        data->is_static = 1; -        return data; +        return strn_to_data(value, strlen (value));  }  data_t * @@ -1127,12 +1117,12 @@ data_to_int64 (data_t *data)  {          VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1); -        char *str = alloca (data->len + 1); +        char *str = alloca (data->len);          if (!str)                  return -1;          memcpy (str, data->data, data->len); -        str[data->len] = '\0'; +          return (int64_t) strtoull (str, NULL, 0);  } @@ -1141,12 +1131,11 @@ data_to_int32 (data_t *data)  {          VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1); -        char *str = alloca (data->len + 1); +        char *str = alloca (data->len);          if (!str)                  return -1;          memcpy (str, data->data, data->len); -        str[data->len] = '\0';          return strtoul (str, NULL, 0);  } @@ -1157,12 +1146,11 @@ data_to_int16 (data_t *data)          VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_INT, "null", -1);          int16_t value = 0; -        char *str = alloca (data->len + 1); +        char *str = alloca (data->len);          if (!str)                  return -1;          memcpy (str, data->data, data->len); -        str[data->len] = '\0';          errno = 0;          value = strtol (str, NULL, 0); @@ -1212,12 +1200,11 @@ data_to_uint64 (data_t *data)  {          VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1); -        char *str = alloca (data->len + 1); +        char *str = alloca (data->len);          if (!str)                  return -1;          memcpy (str, data->data, data->len); -        str[data->len] = '\0';          return strtoll (str, NULL, 0);  } @@ -1227,12 +1214,11 @@ data_to_uint32 (data_t *data)  {          VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1); -        char *str = alloca (data->len + 1); +        char *str = alloca (data->len);          if (!str)                  return -1;          memcpy (str, data->data, data->len); -        str[data->len] = '\0';          return strtol (str, NULL, 0);  } @@ -1243,12 +1229,11 @@ data_to_uint16 (data_t *data)          VALIDATE_DATA_AND_LOG(data, GF_DATA_TYPE_UINT, "null", -1);  	uint16_t value = 0; -        char *str = alloca (data->len + 1); +        char *str = alloca (data->len);          if (!str)                  return -1;          memcpy (str, data->data, data->len); -        str[data->len] = '\0';  	errno = 0;  	value = strtol (str, NULL, 0);  | 
