summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJindrich Novy <jnovy@redhat.com>2008-04-17 09:01:28 +0200
committerJindrich Novy <jnovy@redhat.com>2008-04-17 09:01:28 +0200
commitbf3a8e6cd9253d2321a5d8c3665fa591eca3aae8 (patch)
tree27af179dacd29b2e4338a7a198ff12ddd7533613 /tools
parentea8029e4e95e4106ccb6f9b6407c3856a281f312 (diff)
downloadrpm-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.c17
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;