From: Gregory P. Smith Date: Thu, 18 Oct 2007 16:32:02 +0000 (+0000) Subject: A cleaner fix than the one committed last night. Generate random rowids that X-Git-Tag: v2.6a1~1172 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3ef21cb7c61236453b257c30ce08f8f58489e802;p=python A cleaner fix than the one committed last night. Generate random rowids that do not contain null bytes. --- diff --git a/Lib/bsddb/dbtables.py b/Lib/bsddb/dbtables.py index 37a12c8baf..f7930556cb 100644 --- a/Lib/bsddb/dbtables.py +++ b/Lib/bsddb/dbtables.py @@ -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: