diff options
author | tijl <tijl@FreeBSD.org> | 2012-01-28 18:49:04 +0000 |
---|---|---|
committer | tijl <tijl@FreeBSD.org> | 2012-01-28 18:49:04 +0000 |
commit | 145048562133356607edaba1a7cea047d967feea (patch) | |
tree | a318cc7a0ac8c083ddaf2195997a4fb3b37c7a1a /usr.bin | |
parent | 3617a03b5bc99d4d9fb1f9b8cd6d6bc63e468d06 (diff) | |
download | FreeBSD-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')
-rw-r--r-- | usr.bin/hexdump/parse.c | 19 |
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 |