summaryrefslogtreecommitdiff
path: root/py/qstr.c
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2023-11-06 15:08:11 +1100
committerDamien George <damien@micropython.org>2023-11-07 16:01:50 +1100
commit4212799fd8bded69e5cf47faf2ebd675906ac151 (patch)
treed51ca3e69836f898e1ca0bb403cfcf2b0a730ef1 /py/qstr.c
parent9be0623d4ce518eead8ea477a4615cb8c3e357d8 (diff)
py/qstr: Special case qstr_find_strn for empty string.
This handles the case where an empty bytes/bytearray/str could pass in NULL as the str argument (with length zero). This would result in UB in strncmp. Even though our bare-metal implementation of strncmp handles this, best to avoid it for when we're using system strncmp. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
Diffstat (limited to 'py/qstr.c')
-rw-r--r--py/qstr.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/py/qstr.c b/py/qstr.c
index 0ae08354a..dc89013f8 100644
--- a/py/qstr.c
+++ b/py/qstr.c
@@ -233,6 +233,11 @@ STATIC qstr qstr_add(mp_uint_t hash, mp_uint_t len, const char *q_ptr) {
}
qstr qstr_find_strn(const char *str, size_t str_len) {
+ if (str_len == 0) {
+ // strncmp behaviour is undefined for str==NULL.
+ return MP_QSTR_;
+ }
+
// work out hash of str
size_t str_hash = qstr_compute_hash((const byte *)str, str_len);