From: Bjorn Munch Date: December 21 2010 12:02pm Subject: bzr commit into mysql-5.1-mtr branch (bjorn.munch:2962) Bug#58900 List-Archive: http://lists.mysql.com/commits/127399 X-Bug: 58900 Message-Id: <201012211202.oBLC2Gtb000040@khepri15.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0439920634==" --===============0439920634== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/bm136801/my/qgvdol-51/ based on revid:bjorn.munch@stripped 2962 Bjorn Munch 2010-12-21 Bug #58900 query_get_value crashes when result begins with dollar sign Generalized fix for recursive backtick Optional arg to eval_expr telling it not to interpret modified: client/mysqltest.cc mysql-test/r/mysqltest.result mysql-test/t/mysqltest.test === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-12-20 11:58:33 +0000 +++ b/client/mysqltest.cc 2010-12-21 12:00:21 +0000 @@ -474,7 +474,7 @@ VAR* var_init(VAR* v, const char *name, void var_free(void* v); VAR* var_get(const char *var_name, const char** var_name_end, my_bool raw, my_bool ignore_not_existing); -void eval_expr(VAR* v, const char *p, const char** p_end, bool backtick= true); +void eval_expr(VAR* v, const char *p, const char** p_end, bool do_eval= true); my_bool match_delimiter(int c, const char *delim, uint length); void dump_result_to_reject_file(char *buf, int size); void dump_warning_messages(); @@ -2362,7 +2362,7 @@ void var_set_query_get_value(struct st_c break; } } - eval_expr(var, value, 0); + eval_expr(var, value, 0, false); } dynstr_free(&ds_query); mysql_free_result(res); @@ -2392,12 +2392,16 @@ void var_copy(VAR *dest, VAR *src) } -void eval_expr(VAR *v, const char *p, const char **p_end, bool backtick) +void eval_expr(VAR *v, const char *p, const char **p_end, bool do_eval) { DBUG_ENTER("eval_expr"); DBUG_PRINT("enter", ("p: '%s'", p)); + /* Skip to treat as pure string if no evaluation */ + if (! do_eval) + goto NO_EVAL; + if (*p == '$') { VAR *vp; @@ -2417,7 +2421,7 @@ void eval_expr(VAR *v, const char *p, co DBUG_VOID_RETURN; } - if (*p == '`' && backtick) + if (*p == '`') { var_query_set(v, p, p_end); DBUG_VOID_RETURN; @@ -2440,6 +2444,7 @@ void eval_expr(VAR *v, const char *p, co } } + NO_EVAL: { int new_val_len = (p_end && *p_end) ? (int) (*p_end - p) : (int) strlen(p); === modified file 'mysql-test/r/mysqltest.result' --- a/mysql-test/r/mysqltest.result 2010-12-16 14:40:52 +0000 +++ b/mysql-test/r/mysqltest.result 2010-12-21 12:00:21 +0000 @@ -311,6 +311,9 @@ failing query in let create table t1 (a varchar(100)); insert into t1 values ('`select 42`'); `select 42` +insert into t1 values ('$dollar'); +$dollar +`select 42` drop table t1; mysqltest: At line 1: Error running query 'failing query': 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'failing query' at line 1 mysqltest: At line 1: Missing required argument 'filename' to command 'source' === modified file 'mysql-test/t/mysqltest.test' --- a/mysql-test/t/mysqltest.test 2010-12-16 14:40:52 +0000 +++ b/mysql-test/t/mysqltest.test 2010-12-21 12:00:21 +0000 @@ -859,6 +859,12 @@ insert into t1 values ('`select 42`'); let $a= `select * from t1`; # This should output `select 42`, not evaluate it again to 42 echo $a; +insert into t1 values ('$dollar'); +# These should also output the string without evaluating it. +let $a= query_get_value(select * from t1 order by a, a, 1); +echo $a; +let $a= query_get_value(select * from t1 order by a, a, 2); +echo $a; drop table t1; --error 1 --===============0439920634== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/bjorn.munch@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: bjorn.munch@stripped # target_branch: file:///home/bm136801/my/qgvdol-51/ # testament_sha1: c06d6b664a9f6f2b48cfd1bfa385f21a5831363a # timestamp: 2010-12-21 13:02:16 +0100 # base_revision_id: bjorn.munch@stripped\ # sylh97r1xg52hige # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWTe8JcIAAy/fgEAQfPf//3KH nQD////wYAcNz5QAAdu4HQUA9BBkianoU2k8iN6jGSQMRoNqNBp6gGjQSlEGRtJk0aZAAGgNAAAA BKpqekeSaNqNA0A0NAAAAAAEpqaQmU00aGTanqB6mg9QAaBoek2oA5gEwEyMAIxMTCYTBDTE0wEk gTQEwQAAmgUwJB5QaGg/VFB2FHmqZiVdcTEuxjw33ZrG134PWIggFGZV7D7XfLiCJDzJiHWJYxtc duJTEiVxOrUoqNCUCGjlAPF+DyIW2P7SPDUrbO28yASSErJrWCeSiSqCcx0m5Ko4kkxkhQ5NO9Dx nUtMs0ZEQt04KcnTZhP40XbGlSFRAIA8fk11cyh1FCh8eK7TidpU1Dzkuj9JGeEl119iGuIYPY9S kfAVdrbY02Z3FxP7deHplf7+Lzu7brDU/98kQZJdd7C7zCdlRIwhUEK5VZEcsp67xu9FDl9EVPcG Ur/RsqdJsDcANlO8wIeTcjiKR6cOIXF1Yil7nLFAe5Ykni06QfVJTXMiCc17AOqgD3jOXXrxKCQw jJgmfoojiJAEOQDhDA4Ij6GCLluKCBFURQymYrMmUKNcLErK3IZYA6ggkejgR97Q/O0q1TEUA+Fo h4BUeGKnvM+DYkjFFpgMcbLAouKWHFtX2q4j+DUUlqqLFox+rxUg6vOpiuA7+RYIYERAhmI3vERM SM3hIGEU0Oo+hIqNTiA9wphvMBxPbsgfBBQ0Z3FZXeUWRxeKT7pn/bzUVBm0imx7mnaGuZJRORot DVMqLZ7LTBiY2BWanmgak8j5SrjQ1rE6S1EQYdD5jTJ7CRAsHG2XUzqrqBxSHSHKcCrTSh1oPHnY 2G01EmeTPM5mgv32MzcIYEXTNodtxSa3hqwWikoiZh+tpDThlWeRyIEVXhswyuqLHllo0Sqd9UKi kmY4l9c5Y3IqIFWmRIgWwnZRAvKTrsH3j/LmW4E85u4uMBjSUZImGKyyHBmdTqQ0xkXWA46J8rQe PI54KUzY6VE9D76cFYwx9xFriyh0a6h4WQKDaQ9QlWQssbcEdBSWzP2rhUYucmRK+F9Y6LnBJyGj JzAGgtYniJZVAKxawLVifJA4DqORZQGSzuOesUkncF41mTJK3KP+EdBfa4dxyYzH0ZjO2MO5sW22 BgRqfjDRZ3zGBCWxQGMq0rhYJcSRj0Ik7A45lUPHY9Tbo+yA0UaE54ta7JO+n11wAit0uGxanJ0r kEyXi5j4PnkI+27Zvd86bz42Bz+5A4KW8xuKyt+kuD5HMGTv3iO3HMed0k7pV+Bn5DtRkYMZDsD9 TWVdXm/qgO2AbR1jMIPxSgNMkSUW/B5THlJ6K867Nmc9hmUokhoJZnmI2nkYdtR4D3LOHI2L09XM aKIcdy1aPLZEgxEEP38MzphA6jQGjia16rbFjSzrFQKuUcM9mh4jMU0JXhBG1VEyRPmBEOakXmrR n0oUnjxWjdDMOSZGB7rVThzs/EHHeCLrG5SEmsRvLUxeu6/2xETwoSo+tSbeLsZbDl1LOHU7BWH6 LspBoJ7n2DHuw24RtitLb/6BAwiwrgma1A6c47vZenpk3IGAMAGDiQt/vH45BTM9yM7vcvERORwB dygjqNI/d7mnYk2qPBcQ8Bjy6oJEnivtpi6kviUL+PbhCdgU4HA4JBWM7Z6Ao0CrvqJPPSYw8OBC O6V5Qd9lo5NRThnrOvQYa8POQtX0MYhQiAetCrQDCiuZkegRomRsCimAwbkiVZADps8rKhmALRmU l20HOMIB57El0P4DDMFIiudT8XuSTIxG7J1jJKJIUXOROQ4+4yiEUOTJmQy0HjDwZHq29lqUi+Rw LCKIG8QWAd3B4IFq/8gLBYmBBf5AO0Vixdz24lUj/WDHPUgdE5smRAKsy3f4+gaZw/LyrEwLzLfT ZlikUOKVzDWNi1DDJj2h/MGIoE2/g8ywqpQN3VejzgEa6RraToIfgXEltEMAS5DLbMQ6ujDDwukh BtaBol1oXFMEUZ6pNFMQXCKgjkB2FyguuK8MXeq/LMzN6pG8ywBgXcZYC0DgdgF712MWa3WHHMod wjFMW6WlBBaDHSgqkoeBNam0g+bo91YkQE3oWPaqvK/IgcYlBWNcJyrMcoxIuqcjeYF1JuZSb3wT j67jR5XBgfHdJPzhlQ5uh76eRwIjIOSgu/tr3LPzmLeexgI57yRYmXf2LOgxY9HuBxEMgyKbWFCy TzSVQylosIhNNBjLghbGYWBB9B95Q+IPDrpOfFj+LuSKcKEgb3hLhA== --===============0439920634==--