mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
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: 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: Fix for bug #23810: Server crashes on various "show status ..." commands - align the buffer used.
This commit is contained in:
@@ -911,6 +911,9 @@ typedef unsigned long long my_size_t;
|
|||||||
#define ADD_TO_PTR(ptr,size,type) (type) ((byte*) (ptr)+size)
|
#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 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
|
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
|
offsets of members in class for non-POD types (according to the current
|
||||||
|
@@ -2035,7 +2035,9 @@ static bool show_status_array(THD *thd, const char *wild,
|
|||||||
const char *prefix, TABLE *table,
|
const char *prefix, TABLE *table,
|
||||||
bool ucase_names)
|
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 */
|
/* the variable name should not be longer than 64 characters */
|
||||||
char name_buffer[64];
|
char name_buffer[64];
|
||||||
int len;
|
int len;
|
||||||
|
Reference in New Issue
Block a user