From 2310671cd15cd1639436a824922fa0a924cd6367 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 20 Jun 2012 10:07:12 +0200 Subject: geo-rep: handle input without trailing newline; don't reference buf[-1] Do not truncate final byte of a line that does not end in a newline. Do not clobber stack (resbuf[-1]) for input that starts with a NUL byte. Likewise in glusterd_urltransform. Change-Id: Ifdcad02d908c8dcbc1a0eee78d318dd4e7860322 BUG: 789278 Signed-off-by: Jim Meyering Reviewed-on: http://review.gluster.com/3595 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- xlators/mgmt/glusterd/src/glusterd-geo-rep.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'xlators/mgmt/glusterd/src/glusterd-geo-rep.c') diff --git a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c index c66b2db5..62122dbc 100644 --- a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c +++ b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c @@ -229,6 +229,7 @@ glusterd_urltransform (runner_t *runner, char ***linearrp) arr_idx = 0; for (;;) { + size_t len; line = GF_MALLOC (1024, gf_gld_mt_linebuf); if (!line) { error = _gf_true; @@ -239,12 +240,13 @@ glusterd_urltransform (runner_t *runner, char ***linearrp) NULL) break; - if (line[strlen (line) - 1] != '\n') { + len = strlen (line); + if (len == 0 || line[len - 1] != '\n') { GF_FREE (line); error = _gf_true; goto out; } - line[strlen (line) - 1] = '\0'; + line[len - 1] = '\0'; if (arr_idx == arr_len) { arr_len <<= 1; @@ -383,8 +385,11 @@ _fcbk_singleline(char *resbuf, size_t blen, FILE *fp, void *data) errno = 0; ptr = fgets (resbuf, blen, fp); - if (ptr) - resbuf[strlen(resbuf)-1] = '\0'; //strip off \n + if (ptr) { + size_t len = strlen(resbuf); + if (len && resbuf[len-1] == '\n') + resbuf[len-1] = '\0'; //strip off \n + } return errno ? -1 : 0; } -- cgit