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 | |
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.
-rw-r--r-- | runtime/string.c | 13 | ||||
-rw-r--r-- | testsuite/systemtap.string/text_str.exp | 36 | ||||
-rw-r--r-- | testsuite/systemtap.string/text_str.stp | 10 |
3 files changed, 26 insertions, 33 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; } diff --git a/testsuite/systemtap.string/text_str.exp b/testsuite/systemtap.string/text_str.exp index 6e9de7fb..46872ddb 100644 --- a/testsuite/systemtap.string/text_str.exp +++ b/testsuite/systemtap.string/text_str.exp @@ -27,31 +27,31 @@ a="1234567890" b="1234567"... c="1234567"... ----- Using text_str ----- -a=\n\nXYZZY\31 -b=?\31\a\n\n\r\n -c=\n\nXYZZY\31?\31\a\n\n\r\n +a=\n\nXYZZY\031 +b=?\231\a\n\n\r\n +c=\n\nXYZZY\031?\231\a\n\n\r\n ----- Using text_strn ----- -a=\n\nXYZZY\31 -b=?\31\a\n\n\r\n -c=\n\nXYZZY\31?\31\a\n\n\r\n +a=\n\nXYZZY\031 +b=?\231\a\n\n\r\n +c=\n\nXYZZY\031?\231\a\n\n\r\n ----- Using text_strn len = 10 ----- a=\n\nXYZZY -b=?\31\a\n\n +b=?\231\a\n c=\n\nXYZZY ----- Using text_strn len = 12 ----- -a=\n\nXYZZY\31 -b=?\31\a\n\n\r -c=\n\nXYZZY\31 +a=\n\nXYZZY +b=?\231\a\n\n +c=\n\nXYZZY ----- Using text_strn quoted ----- -a="\n\nXYZZY\31" -b="?\31\a\n\n\r\n" -c="\n\nXYZZY\31?\31\a\n\n\r\n" +a="\n\nXYZZY\031" +b="?\231\a\n\n\r\n" +c="\n\nXYZZY\031?\231\a\n\n\r\n" ----- Using text_strn len=10, quoted ----- a="\n\nX"... -b="?\31\"... +b="?\231"... c="\n\nX"... ------ Using text_strn len=14, quoted ----- -a="\n\nXYZZY\31" -b="?\31\a\n\"... -c="\n\nXYZZY"...} +----- Using text_strn len=15, quoted ----- +a="\n\nXYZZY\031" +b="?\231\a\n\"... +c="\n\nXYZZY\"...} stap_run2 $srcdir/$subdir/$test.stp diff --git a/testsuite/systemtap.string/text_str.stp b/testsuite/systemtap.string/text_str.stp index 05acc431..d61273ad 100644 --- a/testsuite/systemtap.string/text_str.stp +++ b/testsuite/systemtap.string/text_str.stp @@ -37,7 +37,7 @@ probe begin { printf("c=%s\n", text_strn(c,12,1)) a = "\n\nXYZZY\031" - b = "\077\031\a\n\n\r\n" + b = "\077\231\a\n\n\r\n" c = a.b printf("----- Using text_str -----\n"); @@ -70,10 +70,10 @@ probe begin { printf("b=%s\n", text_strn(b,10,1)) printf("c=%s\n", text_strn(c,10,1)) - printf("----- Using text_strn len=14, quoted -----\n"); - printf("a=%s\n", text_strn(a,14,1)) - printf("b=%s\n", text_strn(b,14,1)) - printf("c=%s\n", text_strn(c,14,1)) + printf("----- Using text_strn len=15, quoted -----\n"); + printf("a=%s\n", text_strn(a,15,1)) + printf("b=%s\n", text_strn(b,15,1)) + printf("c=%s\n", text_strn(c,15,1)) exit() } |