summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorVarun Gupta <varun.gupta@mariadb.com>2020-10-23 12:32:49 +0530
committerVarun Gupta <varun.gupta@mariadb.com>2020-10-23 22:36:47 +0530
commitb94e8e4b25e039b5f165339b8ee0fd4af856459c (patch)
tree95f0e9b6fe4603d9df2b198b2895d245fa4d284d /sql
parent5a9df1550f256b7be7aaffbf4cbce13d0ca22566 (diff)
downloadmariadb-git-b94e8e4b25e039b5f165339b8ee0fd4af856459c.tar.gz
MDEV-23867: insert... select crash in compute_window_func
There are 2 issues here: Issue #1: memory allocation. An IO_CACHE that uses encryption uses a larger buffer (it needs space for the encrypted data, decrypted data, IO_CACHE_CRYPT struct to describe encryption parameters etc). Issue #2: IO_CACHE::seek_not_done When IO_CACHE objects are cloned, they still share the file descriptor. This means, operation on one IO_CACHE may change the file read position which will confuse other IO_CACHEs using it. The fix of these issues would be: Allocate the buffer to also include the extra size needed for encryption. Perform seek again after one IO_CACHE reads the file.
Diffstat (limited to 'sql')
-rw-r--r--sql/mf_iocache_encr.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/sql/mf_iocache_encr.cc b/sql/mf_iocache_encr.cc
index d741cf8b837..29d7074aeb1 100644
--- a/sql/mf_iocache_encr.cc
+++ b/sql/mf_iocache_encr.cc
@@ -71,6 +71,16 @@ static int my_b_encr_read(IO_CACHE *info, uchar *Buffer, size_t Count)
DBUG_RETURN(1);
}
info->seek_not_done= 0;
+ if (info->next_file_user)
+ {
+ IO_CACHE *c;
+ for (c= info->next_file_user;
+ c!= info;
+ c= c->next_file_user)
+ {
+ c->seek_not_done= 1;
+ }
+ }
}
do