aboutsummaryrefslogtreecommitdiff
path: root/common/str.cpp
diff options
context:
space:
mode:
authorColin Snover2016-11-26 12:56:25 -0600
committerWillem Jan Palenstijn2017-01-05 22:07:24 +0100
commit9d3893459f34b6ada2dad2d9d27216c774a7c4bd (patch)
treecf09a5960aa37cff29666211da50fd488c5f05e9 /common/str.cpp
parent28d2f1d0df4a62c622a714e82ec6a7ab04967730 (diff)
downloadscummvm-rg350-9d3893459f34b6ada2dad2d9d27216c774a7c4bd.tar.gz
scummvm-rg350-9d3893459f34b6ada2dad2d9d27216c774a7c4bd.tar.bz2
scummvm-rg350-9d3893459f34b6ada2dad2d9d27216c774a7c4bd.zip
COMMON: Add strnlen for safer C string length reads
This API is intended for use in cases where C strings come from untrusted sources like game files, where malformed data missing the null terminator would cause strlen to read out of bounds.
Diffstat (limited to 'common/str.cpp')
-rw-r--r--common/str.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/common/str.cpp b/common/str.cpp
index 90bd539790..3a0fd6a08e 100644
--- a/common/str.cpp
+++ b/common/str.cpp
@@ -942,6 +942,13 @@ size_t strlcat(char *dst, const char *src, size_t size) {
return dstLength + (src - srcStart);
}
+size_t strnlen(const char *src, size_t maxSize) {
+ size_t counter = 0;
+ while (counter != maxSize && *src++)
+ ++counter;
+ return counter;
+}
+
} // End of namespace Common
// Portable implementation of stricmp / strcasecmp / strcmpi.