Commit edccd23f authored by unknown's avatar unknown

row0sel.c Fix a memory freeing bug when a row which contains an externally...

row0sel.c	Fix a memory freeing bug when a row which contains an externally stored long field in the middle of the row is fetched in a SELECT
srv0start.c	Allow drive name followed by a ':' in a data file path
ha_innobase.cc	Allow drive name followed by a ':' in a data file path


sql/ha_innobase.cc:
  Allow drive name followed by a ':' in a data file path
innobase/srv/srv0start.c:
  Allow drive name followed by a ':' in a data file path
innobase/row/row0sel.c:
  Fix a memory freeing bug when a row which contains an externally stored long field in the middle of the row is fetched in a SELECT
parent f6751dd8
...@@ -2103,6 +2103,7 @@ row_sel_store_mysql_rec( ...@@ -2103,6 +2103,7 @@ row_sel_store_mysql_rec(
if (extern_field_heap) { if (extern_field_heap) {
mem_heap_free(extern_field_heap); mem_heap_free(extern_field_heap);
extern_field_heap = NULL;
} }
} else { } else {
mysql_rec[templ->mysql_null_byte_offset] |= mysql_rec[templ->mysql_null_byte_offset] |=
......
...@@ -141,21 +141,21 @@ srv_normalize_path_for_win( ...@@ -141,21 +141,21 @@ srv_normalize_path_for_win(
} }
/************************************************************************* /*************************************************************************
Adds a slash or a backslash to the end of a string if it is missing. */ Adds a slash or a backslash to the end of a string if it is missing
and the string is not empty. */
static static
char* char*
srv_add_path_separator_if_needed( srv_add_path_separator_if_needed(
/*=============================*/ /*=============================*/
/* out, own: string which has the separator */ /* out, own: string which has the separator if the
string is not empty */
char* str) /* in: null-terminated character string */ char* str) /* in: null-terminated character string */
{ {
char* out_str; char* out_str;
if (ut_strlen(str) == 0) { if (ut_strlen(str) == 0) {
out_str = ut_malloc(2);
sprintf(out_str, "%s", SRV_PATH_SEPARATOR);
return(out_str); return(str);
} }
if (str[ut_strlen(str) - 1] == SRV_PATH_SEPARATOR[0]) { if (str[ut_strlen(str) - 1] == SRV_PATH_SEPARATOR[0]) {
......
...@@ -259,12 +259,15 @@ innobase_parse_data_file_paths_and_sizes(void) ...@@ -259,12 +259,15 @@ innobase_parse_data_file_paths_and_sizes(void)
str = innobase_data_file_path; str = innobase_data_file_path;
/* First calculate the number of data files and check syntax: /* First calculate the number of data files and check syntax:
path:size[M];path:size[M]... */ path:size[M];path:size[M]... . Note that a Windows path may
contain a drive name and a ':'. */
while (*str != '\0') { while (*str != '\0') {
path = str; path = str;
while (*str != ':' && *str != '\0') { while ((*str != ':' && *str != '\0')
|| (*str == ':'
&& (*(str + 1) == '\\' || *(str + 1) == '/'))) {
str++; str++;
} }
...@@ -335,7 +338,11 @@ innobase_parse_data_file_paths_and_sizes(void) ...@@ -335,7 +338,11 @@ innobase_parse_data_file_paths_and_sizes(void)
while (*str != '\0') { while (*str != '\0') {
path = str; path = str;
while (*str != ':' && *str != '\0') { /* Note that we must ignore the ':' in a Windows path */
while ((*str != ':' && *str != '\0')
|| (*str == ':'
&& (*(str + 1) == '\\' || *(str + 1) == '/'))) {
str++; str++;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment