Author: astitcher
Date: Mon Jun  9 13:23:47 2014
New Revision: 1601373

URL: http://svn.apache.org/r1601373
Log:
QPID-5805: Disallow % and _ characters as escapes in selector LIKE expression

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/SelectorExpression.cpp
    qpid/trunk/qpid/cpp/src/tests/Selector.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/SelectorExpression.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/SelectorExpression.cpp?rev=1601373&r1=1601372&r2=1601373&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/SelectorExpression.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/SelectorExpression.cpp Mon Jun  9 
13:23:47 2014
@@ -774,6 +774,9 @@ BoolExpression* specialComparisons(Token
             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();

Modified: qpid/trunk/qpid/cpp/src/tests/Selector.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/Selector.cpp?rev=1601373&r1=1601372&r2=1601373&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/Selector.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/Selector.cpp Mon Jun  9 13:23:47 2014
@@ -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);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to