config.c post refactory cleanup

This commit is contained in:
Oran Agra 2019-12-01 08:19:25 +02:00
parent 18e72c5cc7
commit 6b4366b85b

View File

@ -1802,6 +1802,36 @@ static void numericConfigInit(typeData data) {
SET_NUMERIC_TYPE(data.numeric.default_value) SET_NUMERIC_TYPE(data.numeric.default_value)
} }
static int numericBoundaryCheck(typeData data, long long ll, char **err) {
if (data.numeric.numeric_type == NUMERIC_TYPE_ULONG_LONG ||
data.numeric.numeric_type == NUMERIC_TYPE_UINT ||
data.numeric.numeric_type == NUMERIC_TYPE_SIZE_T) {
/* Boundary check for unsigned types */
unsigned long long ull = ll;
unsigned long long upper_bound = data.numeric.upper_bound;
unsigned long long lower_bound = data.numeric.lower_bound;
if (ull > upper_bound || ull < lower_bound) {
snprintf(loadbuf, LOADBUF_SIZE,
"argument must be between %llu and %llu inclusive",
lower_bound,
upper_bound);
*err = loadbuf;
return 0;
}
} else {
/* Boundary check for signed types */
if (ll > data.numeric.upper_bound || ll < data.numeric.lower_bound) {
snprintf(loadbuf, LOADBUF_SIZE,
"argument must be between %lld and %lld inclusive",
data.numeric.lower_bound,
data.numeric.upper_bound);
*err = loadbuf;
return 0;
}
}
return 1;
}
static int numericConfigLoad(typeData data, sds *argv, int argc, char **err) { static int numericConfigLoad(typeData data, sds *argv, int argc, char **err) {
long long ll; long long ll;
@ -1824,33 +1854,8 @@ static int numericConfigLoad(typeData data, sds *argv, int argc, char **err) {
} }
} }
if (data.numeric.numeric_type == NUMERIC_TYPE_ULONG_LONG || if (!numericBoundaryCheck(data, ll, err))
data.numeric.numeric_type == NUMERIC_TYPE_UINT ||
data.numeric.numeric_type == NUMERIC_TYPE_SIZE_T) {
/* Boundary check for unsigned types */
unsigned long long ull = ll;
unsigned long long upper_bound = data.numeric.upper_bound;
unsigned long long lower_bound = data.numeric.lower_bound;
if (ull > upper_bound || ull < lower_bound) {
snprintf(loadbuf, LOADBUF_SIZE,
"argument must be between %llu and %llu inclusive",
lower_bound,
upper_bound);
*err = loadbuf;
return 0; return 0;
}
} else {
/* Boundary check for signed types */
if (ll > data.numeric.upper_bound ||
ll < data.numeric.lower_bound) {
snprintf(loadbuf, LOADBUF_SIZE,
"argument must be between %lld and %lld inclusive",
data.numeric.lower_bound,
data.numeric.upper_bound);
*err = loadbuf;
return 0;
}
}
if (data.numeric.is_valid_fn && !data.numeric.is_valid_fn(ll, err)) if (data.numeric.is_valid_fn && !data.numeric.is_valid_fn(ll, err))
return 0; return 0;
@ -1870,33 +1875,8 @@ static int numericConfigSet(typeData data, sds value, char **err) {
if (!string2ll(value, sdslen(value),&ll)) return 0; if (!string2ll(value, sdslen(value),&ll)) return 0;
} }
if (data.numeric.numeric_type == NUMERIC_TYPE_ULONG_LONG || if (!numericBoundaryCheck(data, ll, err))
data.numeric.numeric_type == NUMERIC_TYPE_UINT ||
data.numeric.numeric_type == NUMERIC_TYPE_SIZE_T) {
/* Boundary check for unsigned types */
unsigned long long ull = ll;
unsigned long long upper_bound = data.numeric.upper_bound;
unsigned long long lower_bound = data.numeric.lower_bound;
if (ull > upper_bound || ull < lower_bound) {
snprintf(loadbuf, LOADBUF_SIZE,
"argument must be between %llu and %llu inclusive",
lower_bound,
upper_bound);
*err = loadbuf;
return 0; return 0;
}
} else {
/* Boundary check for signed types */
if (ll > data.numeric.upper_bound ||
ll < data.numeric.lower_bound) {
snprintf(loadbuf, LOADBUF_SIZE,
"argument must be between %lld and %lld inclusive",
data.numeric.lower_bound,
data.numeric.upper_bound);
*err = loadbuf;
return 0;
}
}
if (data.numeric.is_valid_fn && !data.numeric.is_valid_fn(ll, err)) if (data.numeric.is_valid_fn && !data.numeric.is_valid_fn(ll, err))
return 0; return 0;