From 27b85f8565bc8bb0ce8e31c8e98107b64ff7febe Mon Sep 17 00:00:00 2001 From: xsa Date: Sat, 16 Apr 2005 19:05:02 +0000 Subject: snprintf return value check; joris ok --- usr.bin/cvs/diff.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'usr.bin/cvs/diff.c') diff --git a/usr.bin/cvs/diff.c b/usr.bin/cvs/diff.c index ae956aa9bfc..210949bcf8c 100644 --- a/usr.bin/cvs/diff.c +++ b/usr.bin/cvs/diff.c @@ -1,4 +1,4 @@ -/* $OpenBSD: diff.c,v 1.29 2005/04/14 16:49:09 joris Exp $ */ +/* $OpenBSD: diff.c,v 1.30 2005/04/16 19:05:02 xsa Exp $ */ /* * Copyright (C) Caldera International Inc. 2001-2002. * All rights reserved. @@ -475,6 +475,7 @@ cvs_diff_sendflags(struct cvsroot *root) int cvs_diff_file(struct cvs_file *cfp, void *arg) { + int l; char *dir, *repo, buf[64]; char fpath[MAXPATHLEN], dfpath[MAXPATHLEN], rcspath[MAXPATHLEN]; char path_tmp1[MAXPATHLEN], path_tmp2[MAXPATHLEN]; @@ -556,8 +557,15 @@ cvs_diff_file(struct cvs_file *cfp, void *arg) cvs_sendreq(root, CVS_REQ_MODIFIED, CVS_FILE_NAME(cfp)); cvs_sendfile(root, diff_file); } else { - snprintf(rcspath, sizeof(rcspath), "%s/%s/%s%s", + l = snprintf(rcspath, sizeof(rcspath), "%s/%s/%s%s", root->cr_dir, repo, diff_file, RCS_FILE_EXT); + if (l == -1 || l >= (int)sizeof(rcspath)) { + errno = ENAMETOOLONG; + cvs_log(LP_ERRNO, "%s", rcspath); + + cvs_ent_free(entp); + return (-1); + } rf = rcs_open(rcspath, RCS_READ); if (rf == NULL) { -- cgit v1.2.3-59-g8ed1b