← Back to team overview

openerp-india team mailing list archive

[Bug 1024958] [NEW] count attachment crashes or gives wrong value. Error in _search function

 

Public bug reported:

I will try to be as clear as possible :-)

I am using openerp 6.1

if the function _search in ir_attachment.py is called with the parameter
count=True (eg for having the number of attachments shown on the button
attachments in the client) The function can generate an error or give an
invalid count.

the problem is in line 58.

def _search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
        ids = super(ir_attachment, self)._search(cr, uid, args, offset=offset,
                                                 limit=limit, order=order,
                                                 context=context, count=count,
                                                 access_rights_uid=access_rights_uid)
this should be:

        ids = super(ir_attachment, self)._search(cr, uid, args, offset=offset,
                                                 limit=limit, order=order,
+                                               context=context, count=False, 
-                                                context=context, count=count,
                                                 access_rights_uid=access_rights_uid)

-> you want to get a list of the existing attachements and later on you
count the ones where you have permission to. If count=count(=True) then
you get the number of attachments, if this number by accident is the
same as an existing id then you can get a wrong value. If the number
isn't by accident an existing id then the system crashes later in the
code.


The error can be reproduced in the gtk-client by:
- create an empty database
- create an attachment somewhere (id=1)
- delete this attachment (=> id=1 is removed)
- create a new attachment on a certain object eg sale order (id=2)
now if you open the sale order where the attachment is attached to the system crashes when trying to get the number of attachments attached to this sales order (for showing on the attachment button)
what happens:
in the line ids = super(ir_attachement,...... the amount of attachements is fetched from the database, in this case = 1. Then this is used as an id of an attachement, but this doesn't exists :-) =>error when trying to loop through the attachements.

** Affects: openobject-server
     Importance: Undecided
         Status: New


** Tags: attachment

-- 
You received this bug notification because you are a member of OpenERP
Indian Team, which is subscribed to OpenERP Server.
https://bugs.launchpad.net/bugs/1024958

Title:
  count attachment crashes or gives wrong value.  Error in _search
  function

Status in OpenERP Server:
  New

Bug description:
  I will try to be as clear as possible :-)

  I am using openerp 6.1

  if the function _search in ir_attachment.py is called with the
  parameter count=True (eg for having the number of attachments shown on
  the button attachments in the client) The function can generate an
  error or give an invalid count.

  the problem is in line 58.

  def _search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
          ids = super(ir_attachment, self)._search(cr, uid, args, offset=offset,
                                                   limit=limit, order=order,
                                                   context=context, count=count,
                                                   access_rights_uid=access_rights_uid)
  this should be:

          ids = super(ir_attachment, self)._search(cr, uid, args, offset=offset,
                                                   limit=limit, order=order,
  +                                               context=context, count=False, 
  -                                                context=context, count=count,
                                                   access_rights_uid=access_rights_uid)

  -> you want to get a list of the existing attachements and later on
  you count the ones where you have permission to. If count=count(=True)
  then you get the number of attachments, if this number by accident is
  the same as an existing id then you can get a wrong value. If the
  number isn't by accident an existing id then the system crashes later
  in the code.

  
  The error can be reproduced in the gtk-client by:
  - create an empty database
  - create an attachment somewhere (id=1)
  - delete this attachment (=> id=1 is removed)
  - create a new attachment on a certain object eg sale order (id=2)
  now if you open the sale order where the attachment is attached to the system crashes when trying to get the number of attachments attached to this sales order (for showing on the attachment button)
  what happens:
  in the line ids = super(ir_attachement,...... the amount of attachements is fetched from the database, in this case = 1. Then this is used as an id of an attachement, but this doesn't exists :-) =>error when trying to loop through the attachements.

To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-server/+bug/1024958/+subscriptions


Follow ups

References