Kaydet (Commit) 3ef21cb7 authored tarafından Gregory P. Smith's avatar Gregory P. Smith

A cleaner fix than the one committed last night. Generate random rowids that

do not contain null bytes.
üst f8a2a0b5
...@@ -360,12 +360,13 @@ class bsdTableDB : ...@@ -360,12 +360,13 @@ class bsdTableDB :
unique = 0 unique = 0
while not unique: while not unique:
# Generate a random 64-bit row ID string # 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!) # but it's plenty for our database id needs!)
# The | 0x01010101 is to ensure no null bytes are in the value # We must ensure that no null bytes are in the id value.
newid = struct.pack('ll', blist = []
random.randint(0, 2147483647) | 0x01010101, for x in xrange(_rowid_str_len):
random.randint(0, 2147483647) | 0x01010101) blist.append(random.randint(1,255))
newid = struct.pack('B'*_rowid_str_len, *blist)
# Guarantee uniqueness by adding this key to the database # Guarantee uniqueness by adding this key to the database
try: try:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment