summaryrefslogtreecommitdiffstats
path: root/usr.bin/hexdump
diff options
context:
space:
mode:
authortijl <tijl@FreeBSD.org>2012-01-28 18:49:04 +0000
committertijl <tijl@FreeBSD.org>2012-01-28 18:49:04 +0000
commit145048562133356607edaba1a7cea047d967feea (patch)
treea318cc7a0ac8c083ddaf2195997a4fb3b37c7a1a /usr.bin/hexdump
parent3617a03b5bc99d4d9fb1f9b8cd6d6bc63e468d06 (diff)
downloadFreeBSD-src-145048562133356607edaba1a7cea047d967feea.zip
FreeBSD-src-145048562133356607edaba1a7cea047d967feea.tar.gz
Fix decoding of escape sequences in format strings:
- Zero-terminate the resulting string by letting the for-loop copy the terminating zero. - Exit the for-loop after handling a backslash at the end of the format string to fix a buffer overrun. - Remove some unnecessary comments and blank lines. [1] Requested by: bde [1] PR: bin/144722 Approved by: kib (mentor)
Diffstat (limited to 'usr.bin/hexdump')
-rw-r--r--usr.bin/hexdump/parse.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/usr.bin/hexdump/parse.c b/usr.bin/hexdump/parse.c
index a87eddb..b10ce01 100644
--- a/usr.bin/hexdump/parse.c
+++ b/usr.bin/hexdump/parse.c
@@ -451,21 +451,14 @@ escape(char *p1)
char *p2;
/* alphabetic escape sequences have to be done in place */
- for (p2 = p1; *p1; p1++, p2++) {
- /*
- * Let's take a peak at the next item and see whether or not
- * we need to escape the value...
- */
+ for (p2 = p1;; p1++, p2++) {
if (*p1 == '\\') {
-
p1++;
-
switch(*p1) {
- /* A standalone `\' */
case '\0':
*p2 = '\\';
*++p2 = '\0';
- break;
+ return;
case 'a':
/* *p2 = '\a'; */
*p2 = '\007';
@@ -492,12 +485,12 @@ escape(char *p1)
*p2 = *p1;
break;
}
-
- } else
+ } else {
*p2 = *p1;
-
+ if (*p1 == '\0')
+ return;
+ }
}
-
}
void
OpenPOWER on IntegriCloud