Skip to content

Commit 6860a4b

Browse files
committed
MDEV-12206 Query_cache::send_result_to_client() may corrupt THD::query_plan_flags
This is essentially a backport of the 10.0 commit 203f4d4 that fixes a bug and silences a GCC 6.3.0 warning about a left shift of a signed integer. Missing parenthesis in a macro definition caused wrong operation in the Query_cache::send_result_to_client() statement thd->query_plan_flags= (thd->query_plan_flags & ~QPLAN_QC_NO) | QPLAN_QC; This would expand to thd->query_plan_flags= (thd->query_plan_flags & ~1) << 6 | 1 << 5; which would shift the flags by 6 and clear an unrelated flag, instead of clearing the flag (1 << 6).
1 parent 9c47beb commit 6860a4b

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

sql/log_slow.h

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (C) 2009 Monty Program Ab
1+
/* Copyright (C) 2009, 2017, MariaDB Corporation.
22
33
This program is free software; you can redistribute it and/or modify
44
it under the terms of the GNU General Public License as published by
@@ -16,20 +16,19 @@
1616
/* Defining what to log to slow log */
1717

1818
#define LOG_SLOW_VERBOSITY_INIT 0
19-
#define LOG_SLOW_VERBOSITY_INNODB 1 << 0
20-
#define LOG_SLOW_VERBOSITY_QUERY_PLAN 1 << 1
19+
#define LOG_SLOW_VERBOSITY_INNODB (1U << 0)
20+
#define LOG_SLOW_VERBOSITY_QUERY_PLAN (1U << 1)
2121

2222
#define QPLAN_INIT QPLAN_QC_NO
2323

24-
#define QPLAN_ADMIN 1 << 0
25-
#define QPLAN_FILESORT 1 << 1
26-
#define QPLAN_FILESORT_DISK 1 << 2
27-
#define QPLAN_FULL_JOIN 1 << 3
28-
#define QPLAN_FULL_SCAN 1 << 4
29-
#define QPLAN_QC 1 << 5
30-
#define QPLAN_QC_NO 1 << 6
31-
#define QPLAN_TMP_DISK 1 << 7
32-
#define QPLAN_TMP_TABLE 1 << 8
24+
#define QPLAN_ADMIN (1U << 0)
25+
#define QPLAN_FILESORT (1U << 1)
26+
#define QPLAN_FILESORT_DISK (1U << 2)
27+
#define QPLAN_FULL_JOIN (1U << 3)
28+
#define QPLAN_FULL_SCAN (1U << 4)
29+
#define QPLAN_QC (1U << 5)
30+
#define QPLAN_QC_NO (1U << 6)
31+
#define QPLAN_TMP_DISK (1U << 7)
32+
#define QPLAN_TMP_TABLE (1U << 8)
3333
/* ... */
34-
#define QPLAN_MAX ((ulong) 1) << 31 /* reserved as placeholder */
35-
34+
#define QPLAN_MAX (1U << 31) /* reserved as placeholder */

0 commit comments

Comments
 (0)