From 3d40d257bb72f76d77fb91bda831e9d9bc27a554 Mon Sep 17 00:00:00 2001 From: crazycs Date: Mon, 4 Mar 2019 22:39:10 +0800 Subject: [PATCH] sessionctx/variable: fix panic when set variable='' (#9533) (#9539) --- expression/integration_test.go | 5 +++++ sessionctx/variable/varsutil.go | 3 +++ 2 files changed, 8 insertions(+) diff --git a/expression/integration_test.go b/expression/integration_test.go index 905ed42aa1171..1b98ac818e672 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -32,6 +32,7 @@ import ( plannercore "github.com/pingcap/tidb/planner/core" "github.com/pingcap/tidb/session" "github.com/pingcap/tidb/sessionctx" + "github.com/pingcap/tidb/sessionctx/variable" "github.com/pingcap/tidb/store/mockstore" "github.com/pingcap/tidb/table" "github.com/pingcap/tidb/types" @@ -3464,6 +3465,10 @@ func (s *testIntegrationSuite) TestSetVariables(c *C) { _, err = tk.Exec("set global transaction read write;") r = tk.MustQuery(`select @@session.tx_read_only, @@global.tx_read_only, @@session.transaction_read_only, @@global.transaction_read_only;`) r.Check(testkit.Rows("0 0 0 0")) + + _, err = tk.Exec("set @@global.max_user_connections='';") + c.Assert(err, NotNil) + c.Assert(err.Error(), Equals, variable.ErrWrongTypeForVar.GenWithStackByArgs("max_user_connections").Error()) } func (s *testIntegrationSuite) TestIssues(c *C) { diff --git a/sessionctx/variable/varsutil.go b/sessionctx/variable/varsutil.go index 10092d1f99561..977d691497d03 100644 --- a/sessionctx/variable/varsutil.go +++ b/sessionctx/variable/varsutil.go @@ -192,6 +192,9 @@ func ValidateGetSystemVar(name string, isGlobal bool) error { } func checkUInt64SystemVar(name, value string, min, max uint64, vars *SessionVars) (string, error) { + if len(value) == 0 { + return value, ErrWrongTypeForVar.GenWithStackByArgs(name) + } if value[0] == '-' { _, err := strconv.ParseInt(value, 10, 64) if err != nil {