MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:ramil Date:May 23 2007 7:15am
Subject:bk commit into 5.1 tree (ramil:1.2504) BUG#23810
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of ram. When ram does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-05-23 12:15:47+05:00, ramil@stripped +2 -0
  Fix for bug #23810: Server crashes on various "show status ..." commands
  
  We access some variable values using casts like *(long *) buff
  that may cause crashes on some platforms (e.g. solaris 64) if buff is
  not properly aligned.
  Fix: align the buffer used.

  include/my_global.h@stripped, 2007-05-23 12:15:46+05:00, ramil@stripped +3 -0
    Fix for bug #23810: Server crashes on various "show status ..." commands
      - MY_DIV_UP(A, B) macro introduced, which devides A then rounds up by B.
      - MY_ALIGNED_BYTE_ARRAY(N, S, T) macro introduced, which declares an S-byte long
        (aligned) N array of type T.

  sql/sql_show.cc@stripped, 2007-05-23 12:15:46+05:00, ramil@stripped +3 -1
    Fix for bug #23810: Server crashes on various "show status ..." commands
      - align the buffer used.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	ramil
# Host:	ramil.myoffice.izhnet.ru
# Root:	/home/ram/work/b23810/b23810.5.1

--- 1.412/sql/sql_show.cc	2007-05-23 12:15:53 +05:00
+++ 1.413/sql/sql_show.cc	2007-05-23 12:15:53 +05:00
@@ -2035,7 +2035,9 @@ static bool show_status_array(THD *thd, 
                               const char *prefix, TABLE *table,
                               bool ucase_names)
 {
-  char buff[SHOW_VAR_FUNC_BUFF_SIZE], *prefix_end;
+  MY_ALIGNED_BYTE_ARRAY(buff_data, SHOW_VAR_FUNC_BUFF_SIZE, long);
+  char * const buff= (char *) &buff_data;
+  char *prefix_end;
   /* the variable name should not be longer than 64 characters */
   char name_buffer[64];
   int len;

--- 1.169/include/my_global.h	2007-05-23 12:15:53 +05:00
+++ 1.170/include/my_global.h	2007-05-23 12:15:53 +05:00
@@ -911,6 +911,9 @@ typedef unsigned long long my_size_t;
 #define ADD_TO_PTR(ptr,size,type) (type) ((byte*) (ptr)+size)
 #define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((byte*) (A) - (byte*) (B))
 
+#define MY_DIV_UP(A, B) (((A) + (B) - 1) / (B))
+#define MY_ALIGNED_BYTE_ARRAY(N, S, T) T N[MY_DIV_UP(S, sizeof(T))]
+
 /*
   Custom version of standard offsetof() macro which can be used to get
   offsets of members in class for non-POD types (according to the current
Thread
bk commit into 5.1 tree (ramil:1.2504) BUG#23810ramil23 May