From: Gregory P. Smith Date: Thu, 18 Oct 2007 08:34:20 +0000 (+0000) Subject: Fix a weird bug in dbtables: if it chose a random rowid string that contained X-Git-Tag: v2.6a1~1173 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f8a2a0b5a9edc5769b2da40c36c49eed4c5c1b33;p=python Fix a weird bug in dbtables: if it chose a random rowid string that contained NULL bytes it would cause the database all sorts of problems in the future leading to very strange random failures and corrupt dbtables.bsdTableDb dbs. --- diff --git a/Lib/bsddb/dbtables.py b/Lib/bsddb/dbtables.py index daf6a9e462..37a12c8baf 100644 --- a/Lib/bsddb/dbtables.py +++ b/Lib/bsddb/dbtables.py @@ -22,7 +22,6 @@ import sys import copy import random import struct -import base64 from types import ListType, StringType import cPickle as pickle @@ -361,11 +360,12 @@ class bsdTableDB : unique = 0 while not unique: # Generate a random 64-bit row ID string - # (note: this code has <64 bits of randomness + # (note: this code has <56 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), - random.randint(0, 2147483647)) + random.randint(0, 2147483647) | 0x01010101, + random.randint(0, 2147483647) | 0x01010101) # Guarantee uniqueness by adding this key to the database try: