segment: Fix 1-byte read past initialized data when file ends in CR.
[pspp] / tests / language / lexer / segment.at
index 5d9440fe216aa536d912e9f3514d611a53d7c5ff..abbc08c8cd4b4a037b7f7155ccc799b0cdde6593 100644 (file)
@@ -291,8 +291,8 @@ AT_SETUP([punctuation])
 AT_KEYWORDS([segment])
 AT_DATA([input], [dnl
 ~ & | = >= > <= < ~= <> ( ) , - + * / [[ ]] **
-~&|=>=><=<~=<>(),-+*/[[]]**
-% : ; ? _ ` { } ~
+~&|=>=><=<~=<>(),-+*/[[]]**!*
+% : ; ? _ ` { } ~ !*
 ])
 AT_DATA([expout-base], [dnl
 punct           ~    space
@@ -337,6 +337,7 @@ punct           /
 punct           [[
 punct           ]]
 punct           **
+macro_id        !*
 newline         \n (later)
 
 punct           %    space
@@ -347,7 +348,8 @@ punct           \_    space
 punct           `    space
 punct           {    space
 punct           }    space
-punct           ~
+punct           ~    space
+macro_id        !*
 -newline         \n (later)
 -
 end
@@ -1096,7 +1098,7 @@ var1 var2 var3 "!enddefine"
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 punct           )
 spaces
@@ -1122,7 +1124,7 @@ define !macro1() var1 var2 var3 /* !enddefine
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 punct           )
 macro_body      _var1_var2_var3_/*_!enddefine
@@ -1145,7 +1147,7 @@ var1 var2 var3!enddefine.
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 punct           )
 spaces
@@ -1168,7 +1170,7 @@ define !macro1()var1 var2 var3!enddefine.
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 punct           )
 macro_body      var1_var2_var3
@@ -1189,7 +1191,7 @@ define !macro1()
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 punct           )
 spaces
@@ -1214,7 +1216,7 @@ define !macro1()
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 punct           )
 spaces
@@ -1243,7 +1245,7 @@ define !macro1(a(), b(), c())
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 identifier      a
 punct           (
@@ -1281,7 +1283,7 @@ define !macro1(
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 newline         \n (later)
 
@@ -1330,7 +1332,7 @@ content 2
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 newline         \n (later)
 
 punct           (
@@ -1368,7 +1370,7 @@ data list /x 1.
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 end_command     .
 newline         \n (first)
 
@@ -1394,7 +1396,7 @@ data list /x 1.
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 newline         \n (later)
 
 identifier      x
@@ -1423,7 +1425,7 @@ data list /x 1.
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 end_command     .
 newline         \n (first)
@@ -1455,7 +1457,7 @@ data list /x 1.
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 end_command     .
 newline         \n (first)
 
@@ -1481,7 +1483,7 @@ content line 2
 ])
 AT_DATA([expout-base], [dnl
 identifier      define    space
-macro_id        !macro1
+macro_name      !macro1
 punct           (
 punct           )
 spaces
@@ -1641,3 +1643,16 @@ end
 ])
 PSPP_CHECK_SEGMENT([-a])
 AT_CLEANUP
+\f
+# This checks for regression against bug #61253.  To see the read of
+# uninitialized data, run with valgrind.  The test will pass either
+# way.  (The bug report has a more complicated crashing case.)
+AT_SETUP([input ends in carriage return])
+printf '\r' > input
+AT_DATA([expout-base], [dnl
+separate_commands
+spaces          \r
+end
+])
+PSPP_CHECK_SEGMENT
+AT_CLEANUP