summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-05-09 08:32:40 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2019-05-23 20:38:42 +0000
commit2fbcba0c83f3be11187510a96828bab569d856f8 (patch)
tree77ac852ccde0f219c6d44c30070e426f40f2c85e /searchlib
parent1f06684f2147c80055bef6536381395f696df75e (diff)
Avoid strncpy
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/util/url.cpp25
-rw-r--r--searchlib/src/vespa/searchlib/util/url.h4
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);