diff options
author | Andrew Hutchings <andrew@mariadb.org> | 2022-09-19 13:25:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-19 13:25:45 +0100 |
commit | 65b4a2afb8fc734352359edfbae32cb2b0ef4f7a (patch) | |
tree | dc30eef7b6949789112423e1fbee187bb20b8f09 /storage | |
parent | 5e959bc3637c063603d043c1e987837675e735b8 (diff) | |
download | mariadb-git-65b4a2afb8fc734352359edfbae32cb2b0ef4f7a.tar.gz |
MDEV-29426 Fix memory leak in CONNECT JSON/BSON (#2255)
* MDEV-29426 Fix memory leak in CONNECT JSON/BSON
If information is being gathered on JSON/BSON tables we leak the heap
allocated to the table class. With this fix we close and cleanup
instead, just as we do for XML tables.
Diffstat (limited to 'storage')
-rw-r--r-- | storage/connect/connect.cc | 3 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/r/bson.result | 24 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/r/json.result | 24 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/t/bson.test | 23 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/t/json.test | 24 |
5 files changed, 97 insertions, 1 deletions
diff --git a/storage/connect/connect.cc b/storage/connect/connect.cc index 7125973bae6..9b9a9d5acb8 100644 --- a/storage/connect/connect.cc +++ b/storage/connect/connect.cc @@ -546,7 +546,8 @@ int CntCloseTable(PGLOBAL g, PTDB tdbp, bool nox, bool abort) if (!tdbp) return rc; // Nothing to do else if (tdbp->GetUse() != USE_OPEN) { - if (tdbp->GetAmType() == TYPE_AM_XML) + if (tdbp->GetAmType() == TYPE_AM_XML || + tdbp->GetAmType() == TYPE_AM_JSN) tdbp->CloseDB(g); // Opened by GetMaxSize return rc; diff --git a/storage/connect/mysql-test/connect/r/bson.result b/storage/connect/mysql-test/connect/r/bson.result index fd15e020aac..985c55f5db7 100644 --- a/storage/connect/mysql-test/connect/r/bson.result +++ b/storage/connect/mysql-test/connect/r/bson.result @@ -515,3 +515,27 @@ Beth 4 Food 17.00 Beth 4 Beer 15.00 Janet 4 Car 17.00 DROP TABLE t1, t2, t3, t4; +# +# MDEV-29426 memory leak on "SHOW INDEX" +# +CREATE TABLE t1 +( +ISBN CHAR(15) NOT NULL, +Language CHAR(2) JPATH='$.LANG', +Subject CHAR(32) JPATH='$.SUBJECT', +AuthorFN CHAR(128) JPATH='$.AUTHOR[*].FIRSTNAME', +AuthorLN CHAR(128) JPATH='$.AUTHOR[*].LASTNAME', +Title CHAR(32) JPATH='$.TITLE', +Translation CHAR(32) JPATH='$.TRANSLATED.PREFIX', +TranslatorFN CHAR(80) JPATH='$.TRANSLATED.TRANSLATOR.FIRSTNAME', +TranslatorLN CHAR(80) JPATH='$.TRANSLATED.TRANSLATOR.LASTNAME', +Publisher CHAR(20) JPATH='$.PUBLISHER.NAME', +Location CHAR(16) JPATH='$.PUBLISHER.PLACE', +Year int(4) JPATH='$.DATEPUB', +INDEX IX(ISBN) +) +ENGINE=CONNECT TABLE_TYPE=BSON FILE_NAME='bib0.json' LRECL=320 OPTION_LIST='Pretty=0'; +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 IX 1 ISBN A NULL NULL NULL XINDEX +DROP TABLE t1; diff --git a/storage/connect/mysql-test/connect/r/json.result b/storage/connect/mysql-test/connect/r/json.result index dc527acd4a3..a8749dd7420 100644 --- a/storage/connect/mysql-test/connect/r/json.result +++ b/storage/connect/mysql-test/connect/r/json.result @@ -515,3 +515,27 @@ Beth 4 Food 17.00 Beth 4 Beer 15.00 Janet 4 Car 17.00 DROP TABLE t1, t2, t3, t4; +# +# MDEV-29426 memory leak on "SHOW INDEX" +# +CREATE TABLE t1 +( +ISBN CHAR(15) NOT NULL, +Language CHAR(2) JPATH='$.LANG', +Subject CHAR(32) JPATH='$.SUBJECT', +AuthorFN CHAR(128) JPATH='$.AUTHOR[*].FIRSTNAME', +AuthorLN CHAR(128) JPATH='$.AUTHOR[*].LASTNAME', +Title CHAR(32) JPATH='$.TITLE', +Translation CHAR(32) JPATH='$.TRANSLATED.PREFIX', +TranslatorFN CHAR(80) JPATH='$.TRANSLATED.TRANSLATOR.FIRSTNAME', +TranslatorLN CHAR(80) JPATH='$.TRANSLATED.TRANSLATOR.LASTNAME', +Publisher CHAR(20) JPATH='$.PUBLISHER.NAME', +Location CHAR(16) JPATH='$.PUBLISHER.PLACE', +Year int(4) JPATH='$.DATEPUB', +INDEX IX(ISBN) +) +ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='bib0.json' LRECL=320 OPTION_LIST='Pretty=0'; +SHOW INDEX FROM t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment +t1 1 IX 1 ISBN A NULL NULL NULL XINDEX +DROP TABLE t1; diff --git a/storage/connect/mysql-test/connect/t/bson.test b/storage/connect/mysql-test/connect/t/bson.test index ab38cab73fc..173435d79d1 100644 --- a/storage/connect/mysql-test/connect/t/bson.test +++ b/storage/connect/mysql-test/connect/t/bson.test @@ -282,6 +282,29 @@ SELECT * FROM t1; SELECT * FROM t1 WHERE WEEK = 4; DROP TABLE t1, t2, t3, t4; +--echo # +--echo # MDEV-29426 memory leak on "SHOW INDEX" +--echo # +CREATE TABLE t1 +( + ISBN CHAR(15) NOT NULL, + Language CHAR(2) JPATH='$.LANG', + Subject CHAR(32) JPATH='$.SUBJECT', + AuthorFN CHAR(128) JPATH='$.AUTHOR[*].FIRSTNAME', + AuthorLN CHAR(128) JPATH='$.AUTHOR[*].LASTNAME', + Title CHAR(32) JPATH='$.TITLE', + Translation CHAR(32) JPATH='$.TRANSLATED.PREFIX', + TranslatorFN CHAR(80) JPATH='$.TRANSLATED.TRANSLATOR.FIRSTNAME', + TranslatorLN CHAR(80) JPATH='$.TRANSLATED.TRANSLATOR.LASTNAME', + Publisher CHAR(20) JPATH='$.PUBLISHER.NAME', + Location CHAR(16) JPATH='$.PUBLISHER.PLACE', + Year int(4) JPATH='$.DATEPUB', + INDEX IX(ISBN) +) +ENGINE=CONNECT TABLE_TYPE=BSON FILE_NAME='bib0.json' LRECL=320 OPTION_LIST='Pretty=0'; +SHOW INDEX FROM t1; +DROP TABLE t1; + # # Clean up # diff --git a/storage/connect/mysql-test/connect/t/json.test b/storage/connect/mysql-test/connect/t/json.test index 8b42ef9cfab..80306fc5480 100644 --- a/storage/connect/mysql-test/connect/t/json.test +++ b/storage/connect/mysql-test/connect/t/json.test @@ -282,6 +282,30 @@ SELECT * FROM t1; SELECT * FROM t1 WHERE WEEK = 4; DROP TABLE t1, t2, t3, t4; + +--echo # +--echo # MDEV-29426 memory leak on "SHOW INDEX" +--echo # +CREATE TABLE t1 +( + ISBN CHAR(15) NOT NULL, + Language CHAR(2) JPATH='$.LANG', + Subject CHAR(32) JPATH='$.SUBJECT', + AuthorFN CHAR(128) JPATH='$.AUTHOR[*].FIRSTNAME', + AuthorLN CHAR(128) JPATH='$.AUTHOR[*].LASTNAME', + Title CHAR(32) JPATH='$.TITLE', + Translation CHAR(32) JPATH='$.TRANSLATED.PREFIX', + TranslatorFN CHAR(80) JPATH='$.TRANSLATED.TRANSLATOR.FIRSTNAME', + TranslatorLN CHAR(80) JPATH='$.TRANSLATED.TRANSLATOR.LASTNAME', + Publisher CHAR(20) JPATH='$.PUBLISHER.NAME', + Location CHAR(16) JPATH='$.PUBLISHER.PLACE', + Year int(4) JPATH='$.DATEPUB', + INDEX IX(ISBN) +) +ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='bib0.json' LRECL=320 OPTION_LIST='Pretty=0'; +SHOW INDEX FROM t1; +DROP TABLE t1; + # # Clean up # |