diff options
author | Panu Matilainen <pmatilai@redhat.com> | 2012-09-18 04:15:56 +0300 |
---|---|---|
committer | Panu Matilainen <pmatilai@redhat.com> | 2012-09-18 04:15:56 +0300 |
commit | bef4be688de3b29fe62d10bf723ad888111853aa (patch) | |
tree | 19670956fe3e9f2a03956ff8b6f9ec7e1c6e8475 | |
parent | 1abd80f9c2a6d746bdc12d708210b69680d7e1ca (diff) | |
download | rpm-bef4be688de3b29fe62d10bf723ad888111853aa.tar.gz rpm-bef4be688de3b29fe62d10bf723ad888111853aa.tar.bz2 rpm-bef4be688de3b29fe62d10bf723ad888111853aa.zip |
Dont assume \0 terminated strings in rpmstrPoolPut()
- Before this, the slen argument was only good for avoiding an extra
strlen() but being able to handle shove and lookup partial strings
without local copy+modify in callers is handy, this is one of
the prerequisites for that.
-rw-r--r-- | rpmio/rpmstrpool.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/rpmio/rpmstrpool.c b/rpmio/rpmstrpool.c index c0fb4bcf4..dc208a622 100644 --- a/rpmio/rpmstrpool.c +++ b/rpmio/rpmstrpool.c @@ -251,7 +251,7 @@ void rpmstrPoolUnfreeze(rpmstrPool pool) static rpmsid rpmstrPoolPut(rpmstrPool pool, const char *s, size_t slen, unsigned int hash) { - const char *t = NULL; + char *t = NULL; size_t ssize = slen + 1; if (ssize > pool->data_alloced - pool->data_size) { @@ -272,7 +272,8 @@ static rpmsid rpmstrPoolPut(rpmstrPool pool, const char *s, size_t slen, unsigne pool->offs_alloced * sizeof(*pool->offs)); } - t = memcpy(pool->data + pool->data_size, s, ssize); + t = memcpy(pool->data + pool->data_size, s, slen); + t[slen] = '\0'; pool->offs[pool->offs_size] = pool->data_size; pool->data_size += ssize; |