MXS-1196: Not all preparable stmts can be parsed

But the out arguments of ...get_[field|function]_infos must
be sensible and the functions must not crash.
This commit is contained in:
Johan Wikman
2017-05-18 16:48:39 +03:00
parent 66e027febd
commit 7c1afe5d2c

View File

@ -2653,6 +2653,9 @@ static void update_field_infos(parsing_info_t* pi,
int32_t qc_mysql_get_field_info(GWBUF* buf, const QC_FIELD_INFO** infos, uint32_t* n_infos) int32_t qc_mysql_get_field_info(GWBUF* buf, const QC_FIELD_INFO** infos, uint32_t* n_infos)
{ {
*infos = NULL;
*n_infos = 0;
if (!buf) if (!buf)
{ {
return QC_RESULT_OK; return QC_RESULT_OK;
@ -2660,7 +2663,7 @@ int32_t qc_mysql_get_field_info(GWBUF* buf, const QC_FIELD_INFO** infos, uint32_
if (!ensure_query_is_parsed(buf)) if (!ensure_query_is_parsed(buf))
{ {
return QC_RESULT_ERROR;; return QC_RESULT_ERROR;
} }
parsing_info_t* pi = get_pinfo(buf); parsing_info_t* pi = get_pinfo(buf);
@ -2775,19 +2778,27 @@ int32_t qc_mysql_get_function_info(GWBUF* buf,
*function_infos = NULL; *function_infos = NULL;
*n_function_infos = 0; *n_function_infos = 0;
const QC_FIELD_INFO* field_infos; int32_t rv = QC_RESULT_OK;
uint32_t n_field_infos;
// We ensure the information has been collected by querying the fields first. if (buf)
qc_mysql_get_field_info(buf, &field_infos, &n_field_infos); {
const QC_FIELD_INFO* field_infos;
uint32_t n_field_infos;
parsing_info_t* pi = get_pinfo(buf); // We ensure the information has been collected by querying the fields first.
ss_dassert(pi); rv = qc_mysql_get_field_info(buf, &field_infos, &n_field_infos);
*function_infos = pi->function_infos; if (rv == QC_RESULT_OK)
*n_function_infos = pi->function_infos_len; {
parsing_info_t* pi = get_pinfo(buf);
ss_dassert(pi);
return QC_RESULT_OK; *function_infos = pi->function_infos;
*n_function_infos = pi->function_infos_len;
}
}
return rv;
} }
namespace namespace