}
}
-
return slen;
}
case FR_TYPE_IPV4_ADDR:
{
size_t name_len = fr_sbuff_adv_past_allowed(&our_in, fr_sbuff_remaining(&our_in), sbuff_char_class_hostname, rules->terminals);
- if (!name_len) return 0;
+ if (!name_len) goto empty_is_invalid;
if (fr_inet_pton4(&addr, fr_sbuff_current(in), name_len,
fr_hostname_lookups, false, true) < 0) return -1;
case FR_TYPE_IPV4_PREFIX:
{
size_t name_len = fr_sbuff_adv_past_allowed(&our_in, fr_sbuff_remaining(&our_in), sbuff_char_class_hostname, rules->terminals);
- if (!name_len) return 0;
+ if (!name_len) goto empty_is_invalid;
if (fr_inet_pton4(&dst->vb_ip, fr_sbuff_current(in), name_len,
fr_hostname_lookups, false, true) < 0) return -1;
case FR_TYPE_IPV6_ADDR:
{
size_t name_len = fr_sbuff_adv_past_allowed(&our_in, fr_sbuff_remaining(&our_in), sbuff_char_class_hostname, rules->terminals);
- if (!name_len) return 0;
+ if (!name_len) goto empty_is_invalid;
/*
* Parse scope, too.
case FR_TYPE_IPV6_PREFIX:
{
size_t name_len = fr_sbuff_adv_past_allowed(&our_in, fr_sbuff_remaining(&our_in), sbuff_char_class_hostname, rules->terminals);
- if (!name_len) return 0;
+ if (!name_len) goto empty_is_invalid;
if (fr_inet_pton6(&dst->vb_ip, fr_sbuff_current(in), name_len,
fr_hostname_lookups, false, true) < 0) return -1;
case FR_TYPE_COMBO_IP_ADDR:
{
size_t name_len = fr_sbuff_adv_past_allowed(&our_in, fr_sbuff_remaining(&our_in), sbuff_char_class_hostname, rules->terminals);
- if (!name_len) return 0;
+ if (!name_len) goto empty_is_invalid;
/*
* Parse scope, too.
case FR_TYPE_COMBO_IP_PREFIX:
{
size_t name_len = fr_sbuff_adv_past_allowed(&our_in, fr_sbuff_remaining(&our_in), sbuff_char_class_hostname, rules->terminals);
- if (!name_len) return 0;
+ if (!name_len) goto empty_is_invalid;
if (fr_inet_pton(&dst->vb_ip, fr_sbuff_current(in), name_len, AF_UNSPEC,
fr_hostname_lookups, true) < 0) return -1;
* Quoted boolean values are "yes", "no", "true", "false"
*/
slen = fr_sbuff_out(NULL, &dst->vb_bool, in);
- if (slen >= 0) return slen;
+ if (slen > 0) return slen;
/*
* For barewords we also allow 0 for false and any other
dst_enumv ? dst_enumv->flags.flag_time_res : FR_TIME_RES_SEC,
false, rules->terminals);
if (slen < 0) return slen;
+ if (!slen) {
+ empty_is_invalid:
+ fr_strerror_const("Empty input is invalid");
+ return -1;
+ }
FR_SBUFF_SET_RETURN(in, &our_in);
case FR_TYPE_NULL:
fuzzer-out util
-
#
# Parse / print data types
#
value int8 -130
match integer underflow
+#
+# Empty input is invalid for IP address types.
+#
+# The "!" is not a valid hostname character, so the parser
+# consumes zero characters and returns "Empty input is invalid".
+#
+value ipaddr
+match Empty input is invalid
+
+value ipaddr !
+match Empty input is invalid
+
+value ipv4prefix !
+match Empty input is invalid
+
+value ipv6addr !
+match Empty input is invalid
+
+value ipv6prefix !
+match Empty input is invalid
+
+value combo-ip !
+match Empty input is invalid
+
+value combo-prefix !
+match Empty input is invalid
+
+#
+# Non-numeric input is invalid for integer types
+#
+
+# Note end of string immediately after "uint32"
+value uint32
+match empty input is invalid
+
+value uint8 !
+match Failed parsing string as type 'uint8'
+
+value uint16 !
+match Failed parsing string as type 'uint16'
+
+value uint32 !
+match Failed parsing string as type 'uint32'
+
+value uint64 !
+match Failed parsing string as type 'uint64'
+
+value int8 !
+match Failed parsing string as type 'int8'
+
+value int16 !
+match Failed parsing string as type 'int16'
+
+value int32 !
+match Failed parsing string as type 'int32'
+
+value int64 !
+match Failed parsing string as type 'int64'
+
+value float32 !
+match Failed parsing string as type 'float32'
+
+value float64 !
+match Failed parsing string as type 'float64'
+
+#
+# Non-boolean input is invalid
+#
+value bool !
+match Invalid boolean value. Accepted values are "yes", "no", "true", "false" or any unquoted integer
+
value date Jan 1 1970 12:00:00 UTC
match 1970-01-01T12:00:00Z
match Invalid character 0x5f in label
count
-match 126
+match 164