Module Name: src
Committed By: kre
Date: Mon Jan 21 13:27:29 UTC 2019
Modified Files:
src/bin/sh: var.c
Log Message:
Fix an off by one buffer length problem. Fortunately, it was off by
one in the "safe" way (it was ensuring the buffer always ended in 2 \0
characters ... one is enough.) This could affect the expansions of
LINENO RANDOM and SECONDS, though only if they have at least 8 digits
(and then, only sometimes). RANDOM thus is safe, as it never produces
a number with more than 5 digits, you'd need a script with 10000000
lines before there might be an issue with LINENO (and even autoconf
generated scripts don't generally get that bit) and a shell would need
to be running for almost 4 months for SECONDS to climb that high.
Nevertheless: XXX pullup -8.
To generate a diff of this commit:
cvs rdiff -u -r1.74 -r1.75 src/bin/sh/var.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/bin/sh/var.c
diff -u src/bin/sh/var.c:1.74 src/bin/sh/var.c:1.75
--- src/bin/sh/var.c:1.74 Wed Dec 12 11:51:33 2018
+++ src/bin/sh/var.c Mon Jan 21 13:27:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.74 2018/12/12 11:51:33 kre Exp $ */
+/* $NetBSD: var.c,v 1.75 2019/01/21 13:27:29 kre Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 5/4/95";
#else
-__RCSID("$NetBSD: var.c,v 1.74 2018/12/12 11:51:33 kre Exp $");
+__RCSID("$NetBSD: var.c,v 1.75 2019/01/21 13:27:29 kre Exp $");
#endif
#endif /* not lint */
@@ -1378,7 +1378,7 @@ get_lineno(struct var *vp)
return vp->text;
#endif
- snprintf(result, length - 1, "%.*s=%d", vp->name_len, vp->text, ln);
+ snprintf(result, length, "%.*s=%d", vp->name_len, vp->text, ln);
return result;
}
#undef result
@@ -1485,7 +1485,7 @@ get_seconds(struct var *vp)
if (!make_space(&buf, vp->name_len + 2 + digits_in(secs)))
return vp->text;
- snprintf(buf.b, buf.len-1, "%.*s=%jd", vp->name_len, vp->text, secs);
+ snprintf(buf.b, buf.len, "%.*s=%jd", vp->name_len, vp->text, secs);
return buf.b;
}
@@ -1571,7 +1571,7 @@ get_random(struct var *vp)
if (!make_space(&buf, vp->name_len + 2 + digits_in(random_val)))
return vp->text;
- snprintf(buf.b, buf.len-1, "%.*s=%jd", vp->name_len, vp->text,
+ snprintf(buf.b, buf.len, "%.*s=%jd", vp->name_len, vp->text,
random_val);
if (buf.b != vp->text && (vp->flags & (VTEXTFIXED|VSTACK)) == 0)