Rev 2606: Detect bad reference key values. in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Fri Jul 13 07:47:10 BST 2007


At http://people.ubuntu.com/~robertc/baz2.0/repository

------------------------------------------------------------
revno: 2606
revision-id: robertc at robertcollins.net-20070713064707-c40uq3k00sk68fev
parent: robertc at robertcollins.net-20070713054155-q8h3533j39cc0t7o
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Fri 2007-07-13 16:47:07 +1000
message:
  Detect bad reference key values.
modified:
  bzrlib/index.py                index.py-20070712131115-lolkarso50vjr64s-1
  bzrlib/tests/test_index.py     test_index.py-20070712131115-lolkarso50vjr64s-2
=== modified file 'bzrlib/index.py'
--- a/bzrlib/index.py	2007-07-13 05:41:55 +0000
+++ b/bzrlib/index.py	2007-07-13 06:47:07 +0000
@@ -25,7 +25,7 @@
 _SIGNATURE = "Bazaar Graph Index 1\n"
 
 
-_whitespace_re = re.compile('[\t\n\x0b\x0c\r ]')
+_whitespace_re = re.compile('[\t\n\x0b\x0c\r\x00 ]')
 _newline_null_re = re.compile('[\n\0]')
 
 
@@ -56,6 +56,10 @@
             raise errors.BadIndexValue(value)
         if len(references) != self.reference_lists:
             raise errors.BadIndexValue(references)
+        for reference_list in references:
+            for reference in reference_list:
+                if _whitespace_re.search(reference) is not None:
+                    raise errors.BadIndexKey(reference)
         self._nodes.append((key, references, value))
 
     def finish(self):

=== modified file 'bzrlib/tests/test_index.py'
--- a/bzrlib/tests/test_index.py	2007-07-13 05:41:55 +0000
+++ b/bzrlib/tests/test_index.py	2007-07-13 06:47:07 +0000
@@ -51,8 +51,9 @@
 
     def test_add_node_bad_key(self):
         builder = GraphIndexBuilder()
-        self.assertRaises(errors.BadIndexKey, builder.add_node, 'a key',
-            (), 'data')
+        for bad_char in '\t\n\x0b\x0c\r\x00 ':
+            self.assertRaises(errors.BadIndexKey, builder.add_node,
+                'a%skey' % bad_char, (), 'data')
 
     def test_add_node_bad_data(self):
         builder = GraphIndexBuilder()
@@ -78,6 +79,20 @@
         self.assertRaises(errors.BadIndexValue, builder.add_node, 'akey',
             ([], [], []), 'data aa')
 
+    def test_add_node_bad_key_in_reference_lists(self):
+        # first list, first key - trivial
+        builder = GraphIndexBuilder(reference_lists=1)
+        self.assertRaises(errors.BadIndexKey, builder.add_node, 'akey',
+            (['a key'], ), 'data aa')
+        # need to check more than the first key in the list
+        self.assertRaises(errors.BadIndexKey, builder.add_node, 'akey',
+            (['agoodkey', 'this is a bad key'], ), 'data aa')
+        # and if there is more than one list it should be getting checked
+        # too
+        builder = GraphIndexBuilder(reference_lists=2)
+        self.assertRaises(errors.BadIndexKey, builder.add_node, 'akey',
+            ([], ['a bad key']), 'data aa')
+
 
 class TestGraphIndex(TestCaseWithMemoryTransport):
 




More information about the bazaar-commits mailing list