diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-05-09 08:32:40 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-05-23 20:38:42 +0000 |
commit | 2fbcba0c83f3be11187510a96828bab569d856f8 (patch) | |
tree | 77ac852ccde0f219c6d44c30070e426f40f2c85e /searchlib | |
parent | 1f06684f2147c80055bef6536381395f696df75e (diff) |
Avoid strncpy
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/util/url.cpp | 25 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/util/url.h | 4 |
2 files changed, 12 insertions, 17 deletions
diff --git a/searchlib/src/vespa/searchlib/util/url.cpp b/searchlib/src/vespa/searchlib/util/url.cpp index 6959f1fdff7..638f22fc8b7 100644 --- a/searchlib/src/vespa/searchlib/util/url.cpp +++ b/searchlib/src/vespa/searchlib/util/url.cpp @@ -144,13 +144,12 @@ URL::ParseURLPart(unsigned char *src, unsigned char *p = src; unsigned int len = 0; - while (IsPartChar(*p) && len<destsize-1) { + while (IsPartChar(*p) && len<(destsize-1)) { len++; p++; } if (len > 0) { - strncpy(reinterpret_cast<char *>(dest), - reinterpret_cast<char *>(src), len); + memcpy(dest, src, len); dest[len] = '\0'; } @@ -386,17 +385,15 @@ URL::SetURL(const unsigned char *url, size_t length) _startFragment = p; p = ParseURLPart<IsFragmentChar>(p, _fragment, sizeof(_fragment)); } - - // stuff the rest into address - _startAddress = p; - strncpy(reinterpret_cast<char *>(_address), - reinterpret_cast<char *>(p), sizeof(_address) - 1); - _address[sizeof(_address) - 1] = '\0'; - } else { - _startAddress = p; - strncpy(reinterpret_cast<char *>(_address), - reinterpret_cast<char *>(p), sizeof(_address) - 1); - _address[sizeof(_address) - 1] = '\0'; + } + // stuff the rest into address + _startAddress = p; + _address[0] = '\0'; + ssize_t sz = length - (p - _url); + if (sz > 0) { + ssize_t toCopy = std::min(ssize_t(sizeof(_address) - 1), sz); + memcpy(_address, p, toCopy); + _address[toCopy] = '\0'; } } diff --git a/searchlib/src/vespa/searchlib/util/url.h b/searchlib/src/vespa/searchlib/util/url.h index 6cf6f38af3b..4647c7f0bd8 100644 --- a/searchlib/src/vespa/searchlib/util/url.h +++ b/searchlib/src/vespa/searchlib/util/url.h @@ -90,9 +90,7 @@ protected: void Reset(); template <bool (*IsPartChar)(unsigned char c)> - static unsigned char *ParseURLPart(unsigned char *url, - unsigned char *buf, - unsigned int bufsize); + static unsigned char *ParseURLPart(unsigned char *url, unsigned char *buf, unsigned int bufsize); public: static bool IsAlphaChar(unsigned char c); |