summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <paul@teton.kitebird.com>2003-12-23 09:47:02 -0600
committerunknown <paul@teton.kitebird.com>2003-12-23 09:47:02 -0600
commitf27222ea457d71214881ab2081fd81c7e5291978 (patch)
treed12655ff6617076ddcf9e764d9b9e7cc273b65c6
parentda5328ef74a85eb778830dcdf69bb51c67992ea0 (diff)
parent603ac2474e9f14cf6c84fb3273a9c2e8a0d3478e (diff)
downloadmariadb-git-f27222ea457d71214881ab2081fd81c7e5291978.tar.gz
Merge paul@bk-internal.mysql.com:/home/bk/mysql-4.1
into teton.kitebird.com:/home/paul/mysql-4.1 libmysql/libmysql.c: Auto merged
-rw-r--r--libmysql/libmysql.c16
-rw-r--r--sql/sql_class.cc2
-rw-r--r--sql/sql_class.h3
-rw-r--r--sql/sql_prepare.cc2
4 files changed, 12 insertions, 11 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 783082c6b03..977657f8998 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -2035,14 +2035,6 @@ int cli_stmt_execute(MYSQL_STMT *stmt)
uint null_count;
my_bool result;
-#ifdef CHECK_EXTRA_ARGUMENTS
- if (!stmt->param_buffers)
- {
- /* Parameters exists, but no bound buffers */
- set_stmt_error(stmt, CR_NOT_ALL_PARAMS_BOUND, unknown_sqlstate);
- DBUG_RETURN(1);
- }
-#endif
net_clear(net); /* Sets net->write_pos */
/* Reserve place for null-marker bytes */
null_count= (stmt->param_count+7) /8;
@@ -2099,6 +2091,14 @@ int STDCALL mysql_execute(MYSQL_STMT *stmt)
set_stmt_error(stmt, CR_NO_PREPARE_STMT, unknown_sqlstate);
DBUG_RETURN(1);
}
+#ifdef CHECK_EXTRA_ARGUMENTS
+ if (stmt->param_count && !stmt->param_buffers)
+ {
+ /* Parameters exists, but no bound buffers */
+ set_stmt_error(stmt, CR_NOT_ALL_PARAMS_BOUND, unknown_sqlstate);
+ DBUG_RETURN(1);
+ }
+#endif
if ((*stmt->mysql->methods->stmt_execute)(stmt))
DBUG_RETURN(1);
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 12f0cc4ca72..60220ffc889 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -336,6 +336,8 @@ THD::~THD()
#ifndef DBUG_OFF
dbug_sentry = THD_SENTRY_GONE;
#endif
+ /* Reset stmt_backup.mem_root to not double-free memory from thd.mem_root */
+ init_alloc_root(&stmt_backup.mem_root, 0, 0);
DBUG_VOID_RETURN;
}
diff --git a/sql/sql_class.h b/sql/sql_class.h
index c1cd65edf76..5390e8a4ac4 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -582,8 +582,7 @@ public:
Statement_map stmt_map;
/*
keeps THD state while it is used for active statement
- Note, that double free_root() is safe, so we don't need to do any
- special cleanup for it in THD destructor.
+ Note: we perform special cleanup for it in THD destructor.
*/
Statement stmt_backup;
/*
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index a513e445db9..5d6ab165641 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -1193,7 +1193,7 @@ Prepared_statement::Prepared_statement(THD *thd_arg)
#ifndef EMBEDDED_LIBRARY
setup_params= insert_params; // not fully qualified query
#else
- setup_params_data= setup_params_data;
+ setup_params_data= ::setup_params_data;
#endif
}