Skip to content
Permalink
Browse files

MDEV-12206 Query_cache::send_result_to_client() may corrupt THD::quer…

…y_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).
  • Loading branch information...
dr-m committed Mar 8, 2017
1 parent 9c47beb commit 6860a4b55664d8fc53636906240c089417e1849d
Showing with 13 additions and 14 deletions.
  1. +13 −14 sql/log_slow.h
@@ -1,4 +1,4 @@
/* Copyright (C) 2009 Monty Program Ab
/* Copyright (C) 2009, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,20 +16,19 @@
/* Defining what to log to slow log */

#define LOG_SLOW_VERBOSITY_INIT 0
#define LOG_SLOW_VERBOSITY_INNODB 1 << 0
#define LOG_SLOW_VERBOSITY_QUERY_PLAN 1 << 1
#define LOG_SLOW_VERBOSITY_INNODB (1U << 0)
#define LOG_SLOW_VERBOSITY_QUERY_PLAN (1U << 1)

#define QPLAN_INIT QPLAN_QC_NO

#define QPLAN_ADMIN 1 << 0
#define QPLAN_FILESORT 1 << 1
#define QPLAN_FILESORT_DISK 1 << 2
#define QPLAN_FULL_JOIN 1 << 3
#define QPLAN_FULL_SCAN 1 << 4
#define QPLAN_QC 1 << 5
#define QPLAN_QC_NO 1 << 6
#define QPLAN_TMP_DISK 1 << 7
#define QPLAN_TMP_TABLE 1 << 8
#define QPLAN_ADMIN (1U << 0)
#define QPLAN_FILESORT (1U << 1)
#define QPLAN_FILESORT_DISK (1U << 2)
#define QPLAN_FULL_JOIN (1U << 3)
#define QPLAN_FULL_SCAN (1U << 4)
#define QPLAN_QC (1U << 5)
#define QPLAN_QC_NO (1U << 6)
#define QPLAN_TMP_DISK (1U << 7)
#define QPLAN_TMP_TABLE (1U << 8)
/* ... */
#define QPLAN_MAX ((ulong) 1) << 31 /* reserved as placeholder */

#define QPLAN_MAX (1U << 31) /* reserved as placeholder */

0 comments on commit 6860a4b

Please sign in to comment.
You can’t perform that action at this time.