summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2014-06-09 13:23:47 +0000
committerAndrew Stitcher <astitcher@apache.org>2014-06-09 13:23:47 +0000
commit5af3dfe7e1b05ff26965eed618fe86e7613003ff (patch)
treea4a102e0de65fd68033238f37d0f43ac60f34a49 /cpp/src
parent62c89a776d9e3361efab5fdb9226424cf7c4d13f (diff)
downloadqpid-python-5af3dfe7e1b05ff26965eed618fe86e7613003ff.tar.gz
QPID-5805: Disallow % and _ characters as escapes in selector LIKE expression
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1601373 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/broker/SelectorExpression.cpp3
-rw-r--r--cpp/src/tests/Selector.cpp1
2 files changed, 4 insertions, 0 deletions
diff --git a/cpp/src/qpid/broker/SelectorExpression.cpp b/cpp/src/qpid/broker/SelectorExpression.cpp
index 1e217737ce..4efb91acf8 100644
--- a/cpp/src/qpid/broker/SelectorExpression.cpp
+++ b/cpp/src/qpid/broker/SelectorExpression.cpp
@@ -774,6 +774,9 @@ BoolExpression* specialComparisons(Tokeniser& tokeniser, std::auto_ptr<Expressio
if (e.val.size()>1) {
throwParseError(tokeniser, "single character string required after ESCAPE");
}
+ if (e.val=="%" || e.val=="_") {
+ throwParseError(tokeniser, "'%' and '_' are not allowed as ESCAPE characters");
+ }
return new LikeExpression(e1.release(), t.val, e.val);
} else {
tokeniser.returnTokens();
diff --git a/cpp/src/tests/Selector.cpp b/cpp/src/tests/Selector.cpp
index 30c69c68af..951f124d3a 100644
--- a/cpp/src/tests/Selector.cpp
+++ b/cpp/src/tests/Selector.cpp
@@ -262,6 +262,7 @@ QPID_AUTO_TEST_CASE(parseStringFail)
BOOST_CHECK_THROW(qb::Selector e("A not 234 escape"), std::range_error);
BOOST_CHECK_THROW(qb::Selector e("A not like 'eclecti_' escape 'happy'"), std::range_error);
BOOST_CHECK_THROW(qb::Selector e("A not like 'eclecti_' escape happy"), std::range_error);
+ BOOST_CHECK_THROW(qb::Selector e("A not like 'eclecti_' escape '%'"), std::range_error);
BOOST_CHECK_THROW(qb::Selector e("A BETWEEN AND 'true'"), std::range_error);
BOOST_CHECK_THROW(qb::Selector e("A NOT BETWEEN 34 OR 3.9"), std::range_error);
BOOST_CHECK_THROW(qb::Selector e("A IN ()"), std::range_error);