summaryrefslogtreecommitdiff
path: root/sql/sql_select.cc
diff options
context:
space:
mode:
authorunknown <sergefp@mysql.com>2006-11-08 02:26:50 +0300
committerunknown <sergefp@mysql.com>2006-11-08 02:26:50 +0300
commit1d2e456f59a81748091a4cd0657940c085dc4af4 (patch)
tree335298336e7e0d085b15e6e3436893036d493d05 /sql/sql_select.cc
parentc0487fb97057727c9587cc05150df64f118c2d31 (diff)
downloadmariadb-git-1d2e456f59a81748091a4cd0657940c085dc4af4.tar.gz
BUG#24056: Crash in subquery:
Don't assume that condition that was pushed down into subquery has produced exactly one KEY_FIELD element - it could produce several or none at all, handle all of those cases.
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r--sql/sql_select.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index f92217302f8..cfc068cec86 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -2951,10 +2951,12 @@ add_key_fields(JOIN *join, KEY_FIELD **key_fields, uint *and_level,
join->unit->item->substype() == Item_subselect::IN_SUBS &&
!join->unit->first_select()->next_select())
{
+ KEY_FIELD *save= *key_fields;
add_key_fields(join, key_fields, and_level, cond, usable_tables,
sargables);
// Indicate that this ref access candidate is for subquery lookup:
- (*key_fields)[-1].outer_ref= TRUE;
+ for (; save != *key_fields; save++)
+ save->outer_ref= TRUE;
}
return;
}