summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2011-03-27 19:09:00 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2011-03-27 19:09:00 (GMT)
commitaf88d866994a20d13b75ecad6ab5144ef5bcc9fc (patch)
tree032d67c68ba31bde0f3354a3f6b01a299c38bd60
parentad64127878d4c00673a51a3fe5b7cbf7cd33fc19 (diff)
parent987403bf1494b2f10d27f9be6bf624d7d920dbaf (diff)
downloadcpython-af88d866994a20d13b75ecad6ab5144ef5bcc9fc.zip
cpython-af88d866994a20d13b75ecad6ab5144ef5bcc9fc.tar.gz
cpython-af88d866994a20d13b75ecad6ab5144ef5bcc9fc.tar.bz2
merge #11696
-rw-r--r--Lib/msilib/__init__.py5
-rw-r--r--Lib/test/test_msilib.py46
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS2
4 files changed, 51 insertions, 3 deletions
diff --git a/Lib/msilib/__init__.py b/Lib/msilib/__init__.py
index 74448e6..6eff89c 100644
--- a/Lib/msilib/__init__.py
+++ b/Lib/msilib/__init__.py
@@ -172,9 +172,8 @@ def add_tables(db, module):
add_data(db, table, getattr(module, table))
def make_id(str):
- #str = str.replace(".", "_") # colons are allowed
- for c in " -+~;":
- str = str.replace(c, "_")
+ identifier_chars = string.ascii_letters + string.digits + "._"
+ str = "".join([c if c in identifier_chars else "_" for c in str])
if str[0] in (string.digits + "."):
str = "_" + str
assert re.match("^[A-Za-z_][A-Za-z0-9_.]*$", str), "FILE"+str
diff --git a/Lib/test/test_msilib.py b/Lib/test/test_msilib.py
new file mode 100644
index 0000000..ccdaec7
--- /dev/null
+++ b/Lib/test/test_msilib.py
@@ -0,0 +1,46 @@
+""" Test suite for the code in msilib """
+import unittest
+import os
+from test.support import run_unittest, import_module
+msilib = import_module('msilib')
+
+class Test_make_id(unittest.TestCase):
+ #http://msdn.microsoft.com/en-us/library/aa369212(v=vs.85).aspx
+ """The Identifier data type is a text string. Identifiers may contain the
+ ASCII characters A-Z (a-z), digits, underscores (_), or periods (.).
+ However, every identifier must begin with either a letter or an
+ underscore.
+ """
+
+ def test_is_no_change_required(self):
+ self.assertEqual(
+ msilib.make_id("short"), "short")
+ self.assertEqual(
+ msilib.make_id("nochangerequired"), "nochangerequired")
+ self.assertEqual(
+ msilib.make_id("one.dot"), "one.dot")
+ self.assertEqual(
+ msilib.make_id("_"), "_")
+ self.assertEqual(
+ msilib.make_id("a"), "a")
+ #self.assertEqual(
+ # msilib.make_id(""), "")
+
+ def test_invalid_first_char(self):
+ self.assertEqual(
+ msilib.make_id("9.short"), "_9.short")
+ self.assertEqual(
+ msilib.make_id(".short"), "_.short")
+
+ def test_invalid_any_char(self):
+ self.assertEqual(
+ msilib.make_id(".s\x82ort"), "_.s_ort")
+ self.assertEqual (
+ msilib.make_id(".s\x82o?*+rt"), "_.s_o___rt")
+
+
+def test_main():
+ run_unittest(__name__)
+
+if __name__ == '__main__':
+ test_main()
diff --git a/Misc/ACKS b/Misc/ACKS
index accb03d..3a2e29a 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -574,6 +574,7 @@ Chris McDonough
Greg McFarlane
Alan McIntyre
Michael McLay
+Mark Mc Mahon
Gordon McMillan
Caolan McNamara
Andrew McNamara
diff --git a/Misc/NEWS b/Misc/NEWS
index 1caef03..0c0e136 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -87,6 +87,8 @@ Core and Builtins
Library
-------
+- Issue #11696: Fix ID generation in msilib.
+
- Issue #11692: Remove unnecessary demo functions in subprocess module.
- Issue #9696: Fix exception incorrectly raised by xdrlib.Packer.pack_int when