@@ -55,6 +55,10 @@ def testEval(self):
5555 tcl .eval ('set a 1' )
5656 self .assertEqual (tcl .eval ('set a' ),'1' )
5757
58+ def test_eval_null_in_result (self ):
59+ tcl = self .interp
60+ self .assertEqual (tcl .eval ('set a "a\\ 0b"' ), 'a\x00 b' )
61+
5862 def testEvalException (self ):
5963 tcl = self .interp
6064 self .assertRaises (TclError ,tcl .eval ,'set a' )
@@ -127,20 +131,29 @@ def testUnsetVarException(self):
127131
128132 def testEvalFile (self ):
129133 tcl = self .interp
130- filename = "testEvalFile.tcl"
131- fd = open (filename ,'w' )
132- script = """set a 1
133- set b 2
134- set c [ expr $a + $b ]
135- """
136- fd .write (script )
137- fd .close ()
138- tcl .evalfile (filename )
139- os .remove (filename )
134+ with open (support .TESTFN , 'w' ) as f :
135+ self .addCleanup (support .unlink , support .TESTFN )
136+ f .write ("""set a 1
137+ set b 2
138+ set c [ expr $a + $b ]
139+ """ )
140+ tcl .evalfile (support .TESTFN )
140141 self .assertEqual (tcl .eval ('set a' ),'1' )
141142 self .assertEqual (tcl .eval ('set b' ),'2' )
142143 self .assertEqual (tcl .eval ('set c' ),'3' )
143144
145+ def test_evalfile_null_in_result (self ):
146+ tcl = self .interp
147+ with open (support .TESTFN , 'w' ) as f :
148+ self .addCleanup (support .unlink , support .TESTFN )
149+ f .write ("""
150+ set a "a\0 b"
151+ set b "a\\ 0b"
152+ """ )
153+ tcl .evalfile (support .TESTFN )
154+ self .assertEqual (tcl .eval ('set a' ), 'a\x00 b' )
155+ self .assertEqual (tcl .eval ('set b' ), 'a\x00 b' )
156+
144157 def testEvalFileException (self ):
145158 tcl = self .interp
146159 filename = "doesnotexists"
@@ -209,6 +222,7 @@ def check(expr, expected):
209222 check ('"abc"' , 'abc' )
210223 check ('"a\xbd \u20ac "' , 'a\xbd \u20ac ' )
211224 check (r'"a\xbd\u20ac"' , 'a\xbd \u20ac ' )
225+ check (r'"a\0b"' , 'a\x00 b' )
212226
213227 def test_exprdouble (self ):
214228 tcl = self .interp
@@ -320,6 +334,11 @@ def passValue(value):
320334 self .assertEqual (passValue (False ), False if self .wantobjects else '0' )
321335 self .assertEqual (passValue ('string' ), 'string' )
322336 self .assertEqual (passValue ('string\u20ac ' ), 'string\u20ac ' )
337+ self .assertEqual (passValue ('str\x00 ing' ), 'str\x00 ing' )
338+ self .assertEqual (passValue ('str\x00 ing\xbd ' ), 'str\x00 ing\xbd ' )
339+ self .assertEqual (passValue ('str\x00 ing\u20ac ' ), 'str\x00 ing\u20ac ' )
340+ self .assertEqual (passValue (b'str\x00 ing' ), 'str\x00 ing' )
341+ self .assertEqual (passValue (b'str\xc0 \x80 ing' ), 'str\x00 ing' )
323342 for i in (0 , 1 , - 1 , 2 ** 31 - 1 , - 2 ** 31 ):
324343 self .assertEqual (passValue (i ), i if self .wantobjects else str (i ))
325344 for f in (0.0 , 1.0 , - 1.0 , 1 / 3 ,
@@ -368,6 +387,13 @@ def nan_eq(actual, expected):
368387 check ('string' , 'string' )
369388 check ('string\xbd ' , 'string\xbd ' )
370389 check ('string\u20ac ' , 'string\u20ac ' )
390+ check (b'string' , 'string' )
391+ check (b'string\xe2 \x82 \xac ' , 'string\u20ac ' )
392+ check ('str\x00 ing' , 'str\x00 ing' )
393+ check ('str\x00 ing\xbd ' , 'str\x00 ing\xbd ' )
394+ check ('str\x00 ing\u20ac ' , 'str\x00 ing\u20ac ' )
395+ check (b'str\xc0 \x80 ing' , 'str\x00 ing' )
396+ check (b'str\xc0 \x80 ing\xe2 \x82 \xac ' , 'str\x00 ing\u20ac ' )
371397 for i in (0 , 1 , - 1 , 2 ** 31 - 1 , - 2 ** 31 ):
372398 check (i , str (i ))
373399 for f in (0.0 , 1.0 , - 1.0 ):
@@ -396,6 +422,7 @@ def test_splitlist(self):
396422 (b'a\n b\t \r c\n ' , ('a' , 'b' , 'c' )),
397423 ('a \u20ac ' , ('a' , '\u20ac ' )),
398424 (b'a \xe2 \x82 \xac ' , ('a' , '\u20ac ' )),
425+ (b'a\xc0 \x80 b c\xc0 \x80 d' , ('a\x00 b' , 'c\x00 d' )),
399426 ('a {b c}' , ('a' , 'b c' )),
400427 (r'a b\ c' , ('a' , 'b c' )),
401428 (('a' , 'b c' ), ('a' , 'b c' )),
@@ -438,6 +465,9 @@ def test_split(self):
438465 (b'a\n b\t \r c\n ' , ('a' , 'b' , 'c' )),
439466 ('a \u20ac ' , ('a' , '\u20ac ' )),
440467 (b'a \xe2 \x82 \xac ' , ('a' , '\u20ac ' )),
468+ (b'a\xc0 \x80 b' , 'a\x00 b' ),
469+ (b'a\xc0 \x80 b c\xc0 \x80 d' , ('a\x00 b' , 'c\x00 d' )),
470+ (b'{a\xc0 \x80 b c\xc0 \x80 d' , '{a\x00 b c\x00 d' ),
441471 ('a {b c}' , ('a' , ('b' , 'c' ))),
442472 (r'a b\ c' , ('a' , ('b' , 'c' ))),
443473 (('a' , b'b c' ), ('a' , ('b' , 'c' ))),
0 commit comments