]> granicus.if.org Git - python/commitdiff
A cleaner fix than the one committed last night. Generate random rowids that
authorGregory P. Smith <greg@mad-scientist.com>
Thu, 18 Oct 2007 16:32:02 +0000 (16:32 +0000)
committerGregory P. Smith <greg@mad-scientist.com>
Thu, 18 Oct 2007 16:32:02 +0000 (16:32 +0000)
do not contain null bytes.

Lib/bsddb/dbtables.py

index 37a12c8baf1cb7c633f76f4d54b5801f7f551d4d..f7930556cb2f63fd7d0797492a1677849beeb257 100644 (file)
@@ -360,12 +360,13 @@ class bsdTableDB :
         unique = 0
         while not unique:
             # Generate a random 64-bit row ID string
-            # (note: this code has <56 bits of randomness
+            # (note: this code has <64 bits of randomness
             # but it's plenty for our database id needs!)
-            # The | 0x01010101 is to ensure no null bytes are in the value
-            newid = struct.pack('ll',
-                                random.randint(0, 2147483647) | 0x01010101,
-                                random.randint(0, 2147483647) | 0x01010101)
+            # We must ensure that no null bytes are in the id value.
+            blist = []
+            for x in xrange(_rowid_str_len):
+                blist.append(random.randint(1,255))
+            newid = struct.pack('B'*_rowid_str_len, *blist)
 
             # Guarantee uniqueness by adding this key to the database
             try: