summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2002-04-15 00:19:12 (GMT)
committerGuido van Rossum <guido@python.org>2002-04-15 00:19:12 (GMT)
commitf90d5292298cbaa114c4a1d000e7d8e946ca65b3 (patch)
tree73d58f00b7a98efd6d015ea81b7bf8a415f8f1b7
parenta258324a3d6e6c70c13e70b2313c169b6c46ec66 (diff)
downloadcpython-f90d5292298cbaa114c4a1d000e7d8e946ca65b3.zip
cpython-f90d5292298cbaa114c4a1d000e7d8e946ca65b3.tar.gz
cpython-f90d5292298cbaa114c4a1d000e7d8e946ca65b3.tar.bz2
Provisional fix for writefile() [SF bug # 541730].
The problem was that an exception can occur in the text.get() call or in the write() call, when the text buffer contains non-ASCII characters. This causes the previous contents of the file to be lost. The provisional fix is to call str(self.text.get(...)) *before* opening the file, so that if the exception occurs, we never open the file. Two orthogonal better solutions have to wait for policy decisions: 1. We could try to encode the data as Latin-1 or as UTF-8; but that would require IDLE to grow a notion of file encoding which requires more thought. 2. We could make backups before overwriting a file. This requires more thought because it needs to be fast and cross-platform and configurable.
-rw-r--r--Tools/idle/IOBinding.py2
1 files changed, 1 insertions, 1 deletions
diff --git a/Tools/idle/IOBinding.py b/Tools/idle/IOBinding.py
index dfea0b6..db9fbd3 100644
--- a/Tools/idle/IOBinding.py
+++ b/Tools/idle/IOBinding.py
@@ -148,9 +148,9 @@ class IOBinding:
def writefile(self, filename):
self.fixlastline()
+ chars = str(self.text.get("1.0", "end-1c"))
try:
f = open(filename, "w")
- chars = self.text.get("1.0", "end-1c")
f.write(chars)
f.close()
## print "saved to", `filename`