diff options
author | Jindrich Novy <jnovy@redhat.com> | 2008-04-17 09:01:28 +0200 |
---|---|---|
committer | Jindrich Novy <jnovy@redhat.com> | 2008-04-17 09:01:28 +0200 |
commit | bf3a8e6cd9253d2321a5d8c3665fa591eca3aae8 (patch) | |
tree | 27af179dacd29b2e4338a7a198ff12ddd7533613 /tools | |
parent | ea8029e4e95e4106ccb6f9b6407c3856a281f312 (diff) | |
download | rpm-bf3a8e6cd9253d2321a5d8c3665fa591eca3aae8.tar.gz rpm-bf3a8e6cd9253d2321a5d8c3665fa591eca3aae8.tar.bz2 rpm-bf3a8e6cd9253d2321a5d8c3665fa591eca3aae8.zip |
Don't copy unknown number of args to buffer of fixed size in initGlobs()
Diffstat (limited to 'tools')
-rw-r--r-- | tools/rpmcache.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/tools/rpmcache.c b/tools/rpmcache.c index 9d372ad68..fd25b83a9 100644 --- a/tools/rpmcache.c +++ b/tools/rpmcache.c @@ -443,24 +443,20 @@ static int ftsPrint(FTS * ftsp, FTSENT * fts, rpmts ts) */ static void initGlobs(rpmts ts, const char ** argv) { - char buf[BUFSIZ]; + char *buf = NULL; int i; - buf[0] = '\0'; if (argv != NULL && * argv != NULL) { const char * arg; int single = (glob_pattern_p(argv[0], 0) && argv[1] == NULL); - char * t; - t = buf; - if (!single) - t = stpcpy(t, "@("); + if (!single) { + rstrcat(&buf, "@("); + } while ((arg = *argv++) != NULL) { - t = stpcpy(t, arg); - *t++ = '|'; + rstrscat(&buf, arg, "|", NULL); } - t[-1] = (single ? '\0' : ')'); - *t = '\0'; + buf[strlen(buf)-1] = single ? '\0' : ')'; } bhpath = rpmExpand("%{_bhpath}", NULL); @@ -509,6 +505,7 @@ static void initGlobs(rpmts ts, const char ** argv) rpmlog(RPMLOG_DEBUG, "\t%d \"%s\"\n", i, bhglobs[i].patterns[0]); } + free(buf); } static rpmVSFlags vsflags = 0; |