diff options
author | Olivier Bertrand <bertrandop@gmail.com> | 2019-11-26 19:22:46 +0100 |
---|---|---|
committer | Olivier Bertrand <bertrandop@gmail.com> | 2019-11-26 19:22:46 +0100 |
commit | f0da39be7fff39f0ee47abe272e0ef96f229c7e3 (patch) | |
tree | a6e98fa182f6ffad5a0105969f936f5168ff3dde /storage/connect/tabcmg.cpp | |
parent | fb91774e4e6451298af51e31356a8b8fb1b19487 (diff) | |
download | mariadb-git-f0da39be7fff39f0ee47abe272e0ef96f229c7e3.tar.gz |
- Fix MDEV-13782
Problem with NOT LIKE queries.
modified: storage/connect/ha_connect.cc
modified: sql/item_cmpfunc.h
- Fix MDEV-21084
Misusage of strncat could cause buffer overflow.
modified: storage/connect/reldef.cpp
modified: storage/connect/tabcmg.cpp
modified: storage/connect/tabjson.cpp
modified: storage/connect/tabrest.cpp
modified: storage/connect/tabxml.cpp
Diffstat (limited to 'storage/connect/tabcmg.cpp')
-rw-r--r-- | storage/connect/tabcmg.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/storage/connect/tabcmg.cpp b/storage/connect/tabcmg.cpp index da1cfd34ac7..b9b7f6e4b60 100644 --- a/storage/connect/tabcmg.cpp +++ b/storage/connect/tabcmg.cpp @@ -53,25 +53,30 @@ bool CMGDISC::FindInDoc(PGLOBAL g, bson_iter_t *iter, const bson_t *doc, { if (!doc || bson_iter_init(iter, doc)) { const char *key; - char colname[65]; - char fmt[129]; - bool newcol; + char colname[65]; + char fmt[129]; + bool newcol; + size_t n; while (bson_iter_next(iter)) { key = bson_iter_key(iter); newcol = true; if (pcn) { - strncpy(colname, pcn, 64); - colname[64] = 0; - strncat(strncat(colname, "_", 65), key, 65); + n = sizeof(colname) - 1; + strncpy(colname, pcn, n); + colname[n] = 0; + n -= strlen(colname); + strncat(strncat(colname, "_", n), key, n - 1); } else strcpy(colname, key); if (pfmt) { - strncpy(fmt, pfmt, 128); - fmt[128] = 0; - strncat(strncat(fmt, ".", 129), key, 129); + n = sizeof(fmt) - 1; + strncpy(fmt, pfmt, n); + fmt[n] = 0; + n -= strlen(fmt); + strncat(strncat(fmt, ".", n), key, n - 1); } else strcpy(fmt, key); |