MXS-2393 Reject statement that cannot be parsed completely
As the masking filter must reject statements that use columns to be masked as arguments to functions, a statement that cannot be fully parsed must be rejected. Unless a statement can be fully parsed we cannot know whether such usage occurs.
This commit is contained in:
@ -389,6 +389,8 @@ bool MaskingFilterSession::reject_if_function_used(GWBUF* pPacket)
|
||||
zHost = "";
|
||||
}
|
||||
|
||||
if (qc_parse(pPacket, QC_COLLECT_FIELDS | QC_COLLECT_FUNCTIONS) == QC_QUERY_PARSED)
|
||||
{
|
||||
auto pred1 = [&sRules, zUser, zHost](const QC_FIELD_INFO& field_info) {
|
||||
const MaskingRules::Rule* pRule = sRules->get_rule_for(field_info, zUser, zHost);
|
||||
|
||||
@ -425,6 +427,18 @@ bool MaskingFilterSession::reject_if_function_used(GWBUF* pPacket)
|
||||
|
||||
rejected = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "The statement could not be fully parsed and will hence be "
|
||||
<< "rejected (masking filter).";
|
||||
|
||||
GWBUF* pResponse = modutil_create_mysql_err_msg(1, 0, 1141, "HY000", ss.str().c_str());
|
||||
set_response(pResponse);
|
||||
|
||||
rejected = true;
|
||||
}
|
||||
|
||||
return rejected;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user