[reportlab-users] Bug Report: Default parameter closure bug in several Graphics and Platypus classes

Robin Becker robin at reportlab.com
Wed Dec 2 05:13:37 EST 2009

Nate Silva wrote:



> On this list yesterday I complained about, and Tim Roberts identified, a bug that causes Frames to be duplicated between PageTemplates.


> See Tim Roberts' e-mail dated 30-Nov-2009 (US) / 01-Dec-2009 (EU).


> Here is part of PageTemplate.__init__:




> The bug occurs anywhere an empty list [] default argument is assigned to an instance variable. These are in the latest Subversion (revision 3604):


> reportlab.graphics.shapes.Polygon (shapes.py:1208)

> reportlab.graphics.shapes.PolyLine (shapes.py:1230)

> reportlab.platypus.doctemplate.PageTemplate (doctemplate.py:246)

> reportlab.platypus.flowables.KeepInFrame (flowables.py:878)

> reportlab.platypus.flowables.FrameSplitter (flowables.py:1145)

> reportlab.platypus.flowables.DocIf (flowables.py:1288)





> http://gist.github.com/246511


> Regards,

> Nate

thanks for the report and search. This will be fixed today. These modules were
coded a long time ago and probably I (or whoever coded them) wasn't really
thinking hard enough about all the use cases.

I think I prefer to indicate the usage in the argument default so we'll probably
use something like

def __init__(.....,frames=[],....):

self.frames = frames or []

which makes the actual value new each time.
Robin Becker

More information about the reportlab-users mailing list