Commit 93d5ca75 authored by Christian Theune's avatar Christian Theune

Fix for bug 127182: Blobs weren't intended to be subclassable, now we're

actively preventing it.
parent ac92c6ef
...@@ -79,6 +79,8 @@ Transactions ...@@ -79,6 +79,8 @@ Transactions
Blobs Blobs
----- -----
- (3.8b4) Fixed bug #127182: Blobs were subclassable which was not desired.
- (3.8b3) Fixed bug #126007: tpc_abort had untested code path that was - (3.8b3) Fixed bug #126007: tpc_abort had untested code path that was
broken. broken.
......
...@@ -60,14 +60,20 @@ class Blob(persistent.Persistent): ...@@ -60,14 +60,20 @@ class Blob(persistent.Persistent):
_p_blob_committed = None # Filename of the committed data _p_blob_committed = None # Filename of the committed data
readers = writers = None readers = writers = None
def __init__(self):
# Raise exception if Blobs are getting subclassed
# refer to ZODB-Bug No.127182 by Jim Fulton on 2007-07-20
if (self.__class__ is not Blob):
raise TypeError('Blobs do not support subclassing.')
self.__setstate__()
def __setstate__(self, state=None): def __setstate__(self, state=None):
# We use lists here because it will allow is to add and remove # we use lists here because it will allow us to add and remove
# atomically # atomically
self.readers = [] self.readers = []
self.writers = [] self.writers = []
__init__ = __setstate__
def __getstate__(self): def __getstate__(self):
return None return None
......
...@@ -160,3 +160,15 @@ Some cleanup in this test is needed:: ...@@ -160,3 +160,15 @@ Some cleanup in this test is needed::
>>> import transaction >>> import transaction
>>> transaction.get().abort() >>> transaction.get().abort()
Subclassing Blobs
-----------------
Blobs are not subclassable::
>>> class SubBlob(Blob):
... pass
>>> my_sub_blob = SubBlob()
Traceback (most recent call last):
...
TypeError: Blobs do not support subclassing.
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