Skip to content

Commit 7e92c86

Browse files
committed
Refactor to make this more concise
1 parent d537d21 commit 7e92c86

File tree

1 file changed

+31
-59
lines changed

1 file changed

+31
-59
lines changed

ext/filter/logical_filters.c

Lines changed: 31 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -969,15 +969,15 @@ static bool ipv6_get_status_flags(int ip[8], bool *global, bool *reserved, bool
969969
return true;
970970
}
971971

972+
/* Validates an ipv4 or ipv6 IP, based on the flag (4, 6, or both) add a flag
973+
* to throw out reserved ranges; multicast ranges... etc. If both allow_ipv4
974+
* and allow_ipv6 flags flag are used, then the first dot or colon determine
975+
* the format */
972976
void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
973977
{
974-
/* validates an ipv4 or ipv6 IP, based on the flag (4, 6, or both) add a
975-
* flag to throw out reserved ranges; multicast ranges... etc. If both
976-
* allow_ipv4 and allow_ipv6 flags flag are used, then the first dot or
977-
* colon determine the format */
978-
979-
int ip[8];
980-
int mode;
978+
int ip[8];
979+
int mode;
980+
bool flag_global, flag_reserved, flag_private; /* flags for ranges as determined by RFC 6890 */
981981

982982
if (memchr(Z_STRVAL_P(value), ':', Z_STRLEN_P(value))) {
983983
mode = FORMAT_IPV6;
@@ -995,63 +995,35 @@ void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
995995
RETURN_VALIDATION_FAILED
996996
}
997997

998-
switch (mode) {
999-
case FORMAT_IPV4:
1000-
{
1001-
if (!_php_filter_validate_ipv4(Z_STRVAL_P(value), Z_STRLEN_P(value), ip)) {
1002-
RETURN_VALIDATION_FAILED
1003-
}
1004-
1005-
/* Check flags */
1006-
bool flag_global, flag_reserved, flag_private;
1007-
bool known_block = ipv4_get_status_flags(ip, &flag_global, &flag_reserved, &flag_private);
1008-
1009-
if (!known_block) {
1010-
break;
1011-
}
1012-
1013-
if ((flags & FILTER_FLAG_GLOBAL_RANGE) && flag_global != true) {
1014-
RETURN_VALIDATION_FAILED
1015-
}
1016-
1017-
if ((flags & FILTER_FLAG_NO_PRIV_RANGE) && flag_private == true) {
1018-
RETURN_VALIDATION_FAILED
1019-
}
1020-
1021-
if ((flags & FILTER_FLAG_NO_RES_RANGE) && flag_reserved == true) {
1022-
RETURN_VALIDATION_FAILED
1023-
}
1024-
}
1025-
break;
998+
if (mode == FORMAT_IPV4) {
999+
if (!_php_filter_validate_ipv4(Z_STRVAL_P(value), Z_STRLEN_P(value), ip)) {
1000+
RETURN_VALIDATION_FAILED
1001+
}
10261002

1027-
case FORMAT_IPV6:
1028-
{
1029-
int res = 0;
1030-
res = _php_filter_validate_ipv6(Z_STRVAL_P(value), Z_STRLEN_P(value), ip);
1031-
if (res < 1) {
1032-
RETURN_VALIDATION_FAILED
1033-
}
1034-
/* Check flags */
1035-
bool flag_global, flag_reserved, flag_private;
1036-
bool known_block = ipv6_get_status_flags(ip, &flag_global, &flag_reserved, &flag_private);
1003+
if (!ipv4_get_status_flags(ip, &flag_global, &flag_reserved, &flag_private)) {
1004+
return; /* no special block */
1005+
}
1006+
}
1007+
else if (mode == FORMAT_IPV6) {
1008+
if (_php_filter_validate_ipv6(Z_STRVAL_P(value), Z_STRLEN_P(value), ip) < 1) {
1009+
RETURN_VALIDATION_FAILED
1010+
}
10371011

1038-
if (!known_block) {
1039-
break;
1040-
}
1012+
if (!ipv6_get_status_flags(ip, &flag_global, &flag_reserved, &flag_private)) {
1013+
return; /* no special block */
1014+
}
1015+
}
10411016

1042-
if ((flags & FILTER_FLAG_GLOBAL_RANGE) && flag_global != true) {
1043-
RETURN_VALIDATION_FAILED
1044-
}
1017+
if ((flags & FILTER_FLAG_GLOBAL_RANGE) && flag_global != true) {
1018+
RETURN_VALIDATION_FAILED
1019+
}
10451020

1046-
if ((flags & FILTER_FLAG_NO_PRIV_RANGE) && flag_private == true) {
1047-
RETURN_VALIDATION_FAILED
1048-
}
1021+
if ((flags & FILTER_FLAG_NO_PRIV_RANGE) && flag_private == true) {
1022+
RETURN_VALIDATION_FAILED
1023+
}
10491024

1050-
if ((flags & FILTER_FLAG_NO_RES_RANGE) && flag_reserved == true) {
1051-
RETURN_VALIDATION_FAILED
1052-
}
1053-
}
1054-
break;
1025+
if ((flags & FILTER_FLAG_NO_RES_RANGE) && flag_reserved == true) {
1026+
RETURN_VALIDATION_FAILED
10551027
}
10561028
}
10571029
/* }}} */

0 commit comments

Comments
 (0)