diff options
-rw-r--r-- | Lib/bsddb/dbtables.py | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Lib/bsddb/dbtables.py b/Lib/bsddb/dbtables.py index 37a12c8..f793055 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: |