diff options
author | Josh Stone <jistone@redhat.com> | 2010-02-15 19:28:43 -0800 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2010-02-16 15:55:01 -0800 |
commit | 2a818a16b0c371977303e464bfc75ad8814a9c7a (patch) | |
tree | 8c29ccf8bb1c6a5bba43ce4e9c60516f4cecfc05 /runtime | |
parent | e6364d7923d49c7bfe1a807cd877cb9b29ca0acf (diff) | |
download | systemtap-steved-2a818a16b0c371977303e464bfc75ad8814a9c7a.tar.gz systemtap-steved-2a818a16b0c371977303e464bfc75ad8814a9c7a.tar.xz systemtap-steved-2a818a16b0c371977303e464bfc75ad8814a9c7a.zip |
PR11277: Use consistent octal in quoted strings
Previously, our octal escapes used variable lengths, which can lead to
ambiguities. Also, 8-bit characters would only output the least digit.
* runtime/string.c (_stp_text_str): Always output 3-digit octal escapes,
and handle 8-bit chars more gracefully.
* testsuite/systemtap.string/text_str.stp: Include an 8-bit character.
* testsuite/systemtap.string/text_str.exp: Above + expect 3-digit octal.
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/string.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/runtime/string.c b/runtime/string.c index b3f81f0e..1d4cb255 100644 --- a/runtime/string.c +++ b/runtime/string.c @@ -102,12 +102,7 @@ static void _stp_text_str(char *outstr, char *in, int len, int quoted, int user) num = 2; break; default: - if (c > 077) - num = 4; - else if (c > 07) - num = 3; - else - num = 2; + num = 4; break; } @@ -144,10 +139,8 @@ static void _stp_text_str(char *outstr, char *in, int len, int quoted, int user) *out++ = '\\'; break; default: /* output octal representation */ - if (c > 077) - *out++ = to_oct_digit(c >> 6); - if (c > 07) - *out++ = to_oct_digit((c & 070) >> 3); + *out++ = to_oct_digit((c >> 6) & 03); + *out++ = to_oct_digit((c >> 3) & 07); *out++ = to_oct_digit(c & 07); break; } |