summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2010-02-15 19:28:43 -0800
committerJosh Stone <jistone@redhat.com>2010-02-16 15:55:01 -0800
commit2a818a16b0c371977303e464bfc75ad8814a9c7a (patch)
tree8c29ccf8bb1c6a5bba43ce4e9c60516f4cecfc05
parente6364d7923d49c7bfe1a807cd877cb9b29ca0acf (diff)
downloadsystemtap-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.c13
-rw-r--r--testsuite/systemtap.string/text_str.exp36
-rw-r--r--testsuite/systemtap.string/text_str.stp10
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()
}