List:Commits« Previous MessageNext Message »
From:Davi Arnaut Date:October 16 2008 2:05am
Subject:bzr push into mysql-5.1 branch (davi:2670 to 2671)
View as plain text  
 2671 Davi Arnaut	2008-10-15 [merge]
      Merge mysql-5.0-bugteam into mysql-5.1-bugteam.
modified:
  mysql-test/r/limit.result
  mysql-test/r/sp.result
  mysql-test/t/limit.test
  mysql-test/t/sp.test
  sql/item.cc
  sql/sql_lex.cc

 2670 Davi Arnaut	2008-10-15
      Bug#38477: my_pthread_setprio can change dispatch class on Solaris, not just priority
      
      The problem is that the function used by the server to increase
      the thread's priority (pthread_setschedparam) has the unintended
      side-effect of changing the calling thread scheduling policy,
      possibly overwriting a scheduling policy set by a sysadmin.
      
      The solution is to rely on the pthread_setschedprio function, if
      available, as it only changes the scheduling priority and does not
      change the scheduling policy. This function is usually available on
      Solaris and Linux, but it use won't work by default on Linux as the
      the default scheduling policy only accepts a static priority 0 -- this
      is acceptable for now as priority changing on Linux is broken anyway.
modified:
  configure.in
  include/my_pthread.h

=== modified file 'mysql-test/r/limit.result'
--- a/mysql-test/r/limit.result	2008-02-28 14:34:08 +0000
+++ b/mysql-test/r/limit.result	2008-10-15 21:34:51 +0000
@@ -111,3 +111,6 @@ set @a=-14632475938453979136;
 execute s using @a, @a;
 ERROR HY000: Incorrect arguments to EXECUTE
 End of 5.0 tests
+select 1 as a limit 4294967296,10;
+a
+End of 5.1 tests

=== modified file 'mysql-test/r/sp.result'
--- a/mysql-test/r/sp.result	2008-09-20 14:52:34 +0000
+++ b/mysql-test/r/sp.result	2008-10-16 01:50:56 +0000
@@ -6846,6 +6846,19 @@ select substr(`str`, `pos`+ 1 ) into `st
 end $
 call `p2`('s s s s s s');
 drop procedure `p2`;
+drop table if exists t1;
+drop procedure if exists p1;
+create procedure p1() begin select * from t1; end$
+call p1$
+ERROR 42S02: Table 'test.t1' doesn't exist
+create table t1 (a integer)$
+call p1$
+a
+alter table t1 add b integer;
+call p1$
+a
+drop table t1;
+drop procedure p1;
 # ------------------------------------------------------------------
 # -- End of 5.0 tests
 # ------------------------------------------------------------------

=== modified file 'mysql-test/t/limit.test'
--- a/mysql-test/t/limit.test	2008-02-28 23:22:50 +0000
+++ b/mysql-test/t/limit.test	2008-10-16 01:50:56 +0000
@@ -95,3 +95,11 @@ set @a=-14632475938453979136;
 execute s using @a, @a;
 
 --echo End of 5.0 tests
+
+#
+# Bug#37075: offset of limit clause might be truncated to 0 on 32-bits server w/o big tables
+#
+
+select 1 as a limit 4294967296,10;
+
+--echo End of 5.1 tests

=== modified file 'mysql-test/t/sp.test'
--- a/mysql-test/t/sp.test	2008-09-20 14:52:34 +0000
+++ b/mysql-test/t/sp.test	2008-10-16 01:50:56 +0000
@@ -8041,6 +8041,28 @@ delimiter ;$
 call `p2`('s s s s s s');
 drop procedure `p2`;
 
+#
+# Bug#38823: Invalid memory access when a SP statement does wildcard expansion
+#
+
+--disable_warnings
+drop table if exists t1;
+drop procedure if exists p1;
+--enable_warnings
+
+delimiter $;
+create procedure p1() begin select * from t1; end$
+--error ER_NO_SUCH_TABLE
+call p1$
+create table t1 (a integer)$
+call p1$
+alter table t1 add b integer;
+call p1$
+delimiter ;$
+
+drop table t1;
+drop procedure p1;
+
 --echo # ------------------------------------------------------------------
 --echo # -- End of 5.0 tests
 --echo # ------------------------------------------------------------------

=== modified file 'sql/item.cc'
--- a/sql/item.cc	2008-10-13 10:22:36 +0000
+++ b/sql/item.cc	2008-10-16 01:50:56 +0000
@@ -1805,7 +1805,8 @@ Item_field::Item_field(THD *thd, Name_re
     be allocated in the statement memory, not in table memory (the table
     structure can go away and pop up again between subsequent executions
     of a prepared statement or after the close_tables_for_reopen() call
-    in mysql_multi_update_prepare()).
+    in mysql_multi_update_prepare() or due to wildcard expansion in stored
+    procedures).
   */
   {
     if (db_name)

=== modified file 'sql/sql_lex.cc'
--- a/sql/sql_lex.cc	2008-10-07 21:52:49 +0000
+++ b/sql/sql_lex.cc	2008-10-16 01:50:56 +0000
@@ -2397,15 +2397,20 @@ void st_select_lex_unit::set_limit(st_se
   val= sl->select_limit ? sl->select_limit->val_uint() : HA_POS_ERROR;
   select_limit_val= (ha_rows)val;
 #ifndef BIG_TABLES
-  /* 
+  /*
     Check for overflow : ha_rows can be smaller then ulonglong if
     BIG_TABLES is off.
     */
   if (val != (ulonglong)select_limit_val)
     select_limit_val= HA_POS_ERROR;
 #endif
-  offset_limit_cnt= (ha_rows)(sl->offset_limit ? sl->offset_limit->val_uint() :
-                                                 ULL(0));
+  val= sl->offset_limit ? sl->offset_limit->val_uint() : ULL(0);
+  offset_limit_cnt= (ha_rows)val;
+#ifndef BIG_TABLES
+  /* Check for truncation. */
+  if (val != (ulonglong)offset_limit_cnt)
+    offset_limit_cnt= HA_POS_ERROR;
+#endif
   select_limit_cnt= select_limit_val + offset_limit_cnt;
   if (select_limit_cnt < select_limit_val)
     select_limit_cnt= HA_POS_ERROR;		// no limit

Thread
bzr push into mysql-5.1 branch (davi:2670 to 2671) Davi Arnaut16 Oct