Fix quoted value skipping
The return value wasn't checked and the code assumed that a non-end iterator was always returned.
This commit is contained in:
@ -1540,13 +1540,19 @@ std::string get_canonical(GWBUF* querybuf)
|
|||||||
else if (*it == '\'' || *it == '"')
|
else if (*it == '\'' || *it == '"')
|
||||||
{
|
{
|
||||||
char c = *it;
|
char c = *it;
|
||||||
it = find_char(std::next(it), buf.end(), c);
|
if ((it = find_char(std::next(it), buf.end(), c)) == buf.end())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
rval[i++] = '?';
|
rval[i++] = '?';
|
||||||
}
|
}
|
||||||
else if (*it == '`')
|
else if (*it == '`')
|
||||||
{
|
{
|
||||||
auto start = it;
|
auto start = it;
|
||||||
it = find_char(std::next(it), buf.end(), '`');
|
if ((it = find_char(std::next(it), buf.end(), '`')) == buf.end())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
std::copy(start, it, &rval[i]);
|
std::copy(start, it, &rval[i]);
|
||||||
i += std::distance(start, it);
|
i += std::distance(start, it);
|
||||||
rval[i++] = '`';
|
rval[i++] = '`';
|
||||||
|
|||||||
Reference in New Issue
Block a user