summaryrefslogtreecommitdiff
path: root/sql/log_event.cc
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2014-09-30 17:06:02 +0200
committerSergei Golubchik <sergii@pisem.net>2014-09-30 17:06:02 +0200
commit4a784356daf12af50047467efb85d6308b0b3603 (patch)
treec906fba87bfa448099ebc6da174a3781ab22a875 /sql/log_event.cc
parent9fe7feb8bb2bcc10c7234d9a0c14d3c0b91291fb (diff)
downloadmariadb-git-4a784356daf12af50047467efb85d6308b0b3603.tar.gz
cleanup: an outbreak of templatonia cured.
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r--sql/log_event.cc37
1 files changed, 9 insertions, 28 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 9bd9929bd57..7fa8640f107 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -88,23 +88,6 @@ TYPELIB binlog_checksum_typelib=
*/
#define FMT_G_BUFSIZE(PREC) (3 + (PREC) + 5 + 1)
-/*
- Explicit instantiation to unsigned int of template available_buffer
- function.
-*/
-template unsigned int available_buffer<unsigned int>(const char*,
- const char*,
- unsigned int);
-
-/*
- Explicit instantiation to unsigned int of template valid_buffer_range
- function.
-*/
-template bool valid_buffer_range<unsigned int>(unsigned int,
- const char*,
- const char*,
- unsigned int);
-
/*
replication event checksum is introduced in the following "checksum-home" version.
The checksum-aware servers extract FD's version to decide whether the FD event
@@ -7539,9 +7522,9 @@ User_var_log_event(const char* buf, uint event_len,
#endif
{
bool error= false;
- const char* buf_start= buf;
+ const char* buf_start= buf, *buf_end= buf + event_len;
+
/* The Post-Header is empty. The Variable Data part begins immediately. */
- const char *start= buf;
buf+= description_event->common_header_len +
description_event->post_header_len[USER_VAR_EVENT-1];
name_len= uint4korr(buf);
@@ -7552,8 +7535,7 @@ User_var_log_event(const char* buf, uint event_len,
may have the bigger value possible, is_null= True and there is no
payload for val, or even that name_len is 0.
*/
- if (!valid_buffer_range<uint>(name_len, buf_start, name,
- event_len - UV_VAL_IS_NULL))
+ if (name + name_len + UV_NAME_LEN_SIZE > buf_end)
{
error= true;
goto err;
@@ -7571,9 +7553,10 @@ User_var_log_event(const char* buf, uint event_len,
}
else
{
- if (!valid_buffer_range<uint>(UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE
- + UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE,
- buf_start, buf, event_len))
+ val= (char *) (buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE +
+ UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE);
+
+ if (val > buf_end)
{
error= true;
goto err;
@@ -7583,10 +7566,8 @@ User_var_log_event(const char* buf, uint event_len,
charset_number= uint4korr(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE);
val_len= uint4korr(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE +
UV_CHARSET_NUMBER_SIZE);
- val= (char *) (buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE +
- UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE);
- if (!valid_buffer_range<uint>(val_len, buf_start, val, event_len))
+ if (val + val_len > buf_end)
{
error= true;
goto err;
@@ -7603,7 +7584,7 @@ User_var_log_event(const char* buf, uint event_len,
Old events will not have this extra byte, thence,
we keep the flags set to UNDEF_F.
*/
- uint bytes_read= ((val + val_len) - start);
+ uint bytes_read= ((val + val_len) - buf_start);
#ifndef DBUG_OFF
bool old_pre_checksum_fd= description_event->is_version_before_checksum(
&description_event->server_version_split);