Commit 3b38d3d5 authored by unknown's avatar unknown

make my_vsnprintf() work with oversized strings

fixed replication bug - flush_master_info() needs to be called every time we read an 
    event from master

this is will not be pushed yet


mysys/my_vsnprintf.c:
  make my_vsnprintf() work with oversized strings
  corrected Swedish "skipp" in the comments
sql/log.cc:
  wrong change - to be undone
sql/slave.cc:
  fixed bug - flush_master_info() needs to be called every time we read an 
  event from master
parent c4ab3fc0
...@@ -39,7 +39,7 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap) ...@@ -39,7 +39,7 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
*to++= *fmt; /* Copy ordinary char */ *to++= *fmt; /* Copy ordinary char */
continue; continue;
} }
/* Skipp if max size is used (to be compatible with printf) */ /* Skip if max size is used (to be compatible with printf) */
fmt++; fmt++;
while (isdigit(*fmt) || *fmt == '.' || *fmt == '-') while (isdigit(*fmt) || *fmt == '.' || *fmt == '-')
fmt++; fmt++;
...@@ -48,15 +48,14 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap) ...@@ -48,15 +48,14 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
if (*fmt == 's') /* String parameter */ if (*fmt == 's') /* String parameter */
{ {
reg2 char *par = va_arg(ap, char *); reg2 char *par = va_arg(ap, char *);
uint plen; uint plen,left_len = (uint)(end-to);
if (!par) par = (char*)"(null)"; if (!par) par = (char*)"(null)";
plen = (uint) strlen(par); plen = (uint) strlen(par);
if ((uint) (end-to) > plen) /* Replace if possible */ if (left_len <= plen)
{ plen = left_len - 1;
to=strmov(to,par); to=strmov(to,par);
continue; continue;
} }
}
else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */ else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */
{ {
register int iarg; register int iarg;
......
...@@ -237,7 +237,8 @@ void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg, ...@@ -237,7 +237,8 @@ void MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg,
/* /*
Explanation of the boolean black magic: Explanation of the boolean black magic:
if we are supposed to write magic number try write if we are supposed to write magic number try write
clean up if failed clean
up if failed
then if index_file has not been previously opened, try to open it then if index_file has not been previously opened, try to open it
clean up if failed clean up if failed
*/ */
......
...@@ -1762,6 +1762,7 @@ reconnect done to recover from failed read"); ...@@ -1762,6 +1762,7 @@ reconnect done to recover from failed read");
from master"); from master");
goto err; goto err;
} }
flush_master_info(mi);
// TODO: check debugging abort code // TODO: check debugging abort code
#ifndef DBUG_OFF #ifndef DBUG_OFF
if (abort_slave_event_count && !--events_till_abort) if (abort_slave_event_count && !--events_till_abort)
......
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