summaryrefslogtreecommitdiff
path: root/sql/sql_string.h
diff options
context:
space:
mode:
authorMonty <monty@mariadb.org>2018-01-19 19:56:34 +0200
committerMonty <monty@mariadb.org>2018-01-30 21:33:56 +0200
commit486c86dd391546fcd181cf4767768b2ee4986ef2 (patch)
treef9090e39c73b4aed58b3c063e9c23880338c167f /sql/sql_string.h
parentf55dc7f733446a201e3b465ae03a0388d192a3ad (diff)
downloadmariadb-git-486c86dd391546fcd181cf4767768b2ee4986ef2.tar.gz
Added some checking that LEX_CSTRING is \0 terminated
- When adding LEX_CSTRING to String, we are now checking that string is \0 terminated (as normally LEX_CSTRING should be usable for printf(). In the cases when one wants to avoid the checking one can use String->append(ptr, length) instead of just String->append(LEX_CSTRING*)
Diffstat (limited to 'sql/sql_string.h')
-rw-r--r--sql/sql_string.h24
1 files changed, 14 insertions, 10 deletions
diff --git a/sql/sql_string.h b/sql/sql_string.h
index 41d31dc33c2..fda90f9543e 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -477,19 +477,18 @@ public:
bool append(const char *s);
bool append(const LEX_STRING *ls)
{
- DBUG_ASSERT(ls->length < UINT_MAX32);
+ DBUG_ASSERT(ls->length < UINT_MAX32 &&
+ ((ls->length == 0 && !ls->str) ||
+ ls->length == strlen(ls->str)));
return append(ls->str, (uint32) ls->length);
}
bool append(const LEX_CSTRING *ls)
{
- DBUG_ASSERT(ls->length < UINT_MAX32);
+ DBUG_ASSERT(ls->length < UINT_MAX32 &&
+ ((ls->length == 0 && !ls->str) ||
+ ls->length == strlen(ls->str)));
return append(ls->str, (uint32) ls->length);
}
- bool append(const LEX_CSTRING &ls)
- {
- DBUG_ASSERT(ls.length < UINT_MAX32);
- return append(ls.str, (uint32) ls.length);
- }
bool append(const char *s, size_t size);
bool append(const char *s, uint arg_length, CHARSET_INFO *cs);
bool append_ulonglong(ulonglong val);
@@ -582,7 +581,9 @@ public:
}
void q_append(const LEX_CSTRING *ls)
{
- DBUG_ASSERT(ls->length < UINT_MAX32);
+ DBUG_ASSERT(ls->length < UINT_MAX32 &&
+ ((ls->length == 0 && !ls->str) ||
+ ls->length == strlen(ls->str)));
q_append(ls->str, (uint32) ls->length);
}
@@ -595,9 +596,12 @@ public:
{
qs_append(str, (uint32)strlen(str));
}
- void qs_append(const LEX_CSTRING *str)
+ void qs_append(const LEX_CSTRING *ls)
{
- qs_append(str->str, str->length);
+ DBUG_ASSERT(ls->length < UINT_MAX32 &&
+ ((ls->length == 0 && !ls->str) ||
+ ls->length == strlen(ls->str)));
+ qs_append(ls->str, ls->length);
}
void qs_append(const char *str, uint32 len);
void qs_append_hex(const char *str, uint32 len);