Subject: Backout [477949] for Tk 8.5, after discussion in TclCore mailing list: option readfile cannot use multibytes. Ticket [0a3d799a]

From: "jan.nijtmans" <[email-masked]>
Date: Wed, 3 Feb 2016 08:45:48 +0000

To clarify a bit, what we discovered was that [[option readfile]]
as found in all Tk releases up to and including 8.5.18 is already
able to read in the whole BMP, so long as the file is stored in
the encoding utf-8.  The classic ASCII subset is fine.  utf-8 is fine.
Other encodings are at best non-portable.

What [477949] did was to add support for files stored in
[[encoding system]] but at the expense of breaking the
support for the files stored in utf-8.  Not the right outcome
for a patch release.
---
 generic/tkOption.c | 13 ++-----------
 tests/option.file3 | 18 ------------------
 tests/option.test  | 11 ++++-------
 3 files changed, 6 insertions(+), 36 deletions(-)
 delete mode 100755 tests/option.file3

diff --git a/generic/tkOption.c b/generic/tkOption.c
index 17989f8..95b140d 100644
--- a/generic/tkOption.c
+++ b/generic/tkOption.c
@@ -1086,7 +1086,7 @@ ReadOptionFile(
     char *buffer;
     int result, bufferSize;
     Tcl_Channel chan;
-    Tcl_DString newName, optString;
+    Tcl_DString newName;
 
     /*
      * Prevent file system access in a safe interpreter.
@@ -1136,16 +1136,7 @@ ReadOptionFile(
     }
     Tcl_Close(NULL, chan);
     buffer[bufferSize] = 0;
-    if ((bufferSize>2) && !memcmp(buffer, "\357\273\277", 3)) {
-	/* File starts with UTF-8 BOM */
-	result = AddFromString(interp, tkwin, buffer+3, priority);
-    } else {
-	Tcl_DStringInit(&optString);
-	Tcl_ExternalToUtfDString(NULL, buffer, bufferSize, &optString);
-	result = AddFromString(interp, tkwin, Tcl_DStringValue(&optString),
-		priority);
-	Tcl_DStringFree(&optString);
-    }
+    result = AddFromString(interp, tkwin, buffer, priority);
     ckfree(buffer);
     return result;
 }
diff --git a/tests/option.file3 b/tests/option.file3
deleted file mode 100755
index 87f41ae..0000000
--- a/tests/option.file3
+++ /dev/null
@@ -1,18 +0,0 @@
-! This file is a sample option (resource) database used to test
-! Tk's option-handling capabilities.
-
-! Comment line \
-  with a backslash-newline sequence embedded in it.
-
-*x1: 	blue
-	 tktest.x2		: green
-*\
-x3 \
-  : pur\
-ple
-*x 4:	brówn
-# More comments, this time delimited by hash-marks.
-	# Comment-line with space.
-*x6:	  
-*x9: \ \	\\\101\n
-# comment line as last line of file.
diff --git a/tests/option.test b/tests/option.test
index 4668771..1bfcb7c 100644
--- a/tests/option.test
+++ b/tests/option.test
@@ -187,7 +187,6 @@ test option-14.12 {error conditions} {
 
 set option1 [file join [testsDirectory] option.file1]
 set option2 [file join [testsDirectory] option.file2]
-set option3 [file join [testsDirectory] option.file3]
 
 test option-15.1 {database files} {
     list [catch {option read non-existent} msg] $msg
@@ -208,18 +207,16 @@ test option-15.9 {database files} {option get . x3 color} burgundy
 test option-15.10 {database files} {
     list [catch {option read $option2} msg] $msg
 } {1 {missing colon on line 2}}
-option read $option3
-test option-15.11 {database files} {option get . {x 4} color} br\xf3wn
 
 test option-16.1 {ReadOptionFile} {
-    set option4 [makeFile {} option.file3]
-    set file [open $option4 w]
+    set option3 [makeFile {} option.file3]
+    set file [open $option3 w]
     fconfigure $file -translation crlf
     puts $file "*x7: true\n*x8: false"
     close $file
-    option read $option4 userDefault
+    option read $option3 userDefault
     set result [list [option get . x7 color] [option get . x8 color]]
-    removeFile $option4
+    removeFile $option3
     set result
 } {true false}
 
-- 
cgit v0.12