From 5b7c63fef7824e56d97ee9add0e554820a2c2411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Fri, 18 Jan 2019 10:25:12 +0200 Subject: [PATCH] Fix quoted value skipping The return value wasn't checked and the code assumed that a non-end iterator was always returned. --- server/core/modutil.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/server/core/modutil.cc b/server/core/modutil.cc index a425d55d1..3c2b285a7 100644 --- a/server/core/modutil.cc +++ b/server/core/modutil.cc @@ -1540,13 +1540,19 @@ std::string get_canonical(GWBUF* querybuf) else if (*it == '\'' || *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++] = '?'; } else if (*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]); i += std::distance(start, it); rval[i++] = '`';