enumerateUsers fails with unicode arguments

Bug #189627 reported by Willi Langenberger
2
Affects Status Importance Assigned to Milestone
Zope PAS
Fix Released
Undecided
Unassigned

Bug Description

The enumerateUsers method of ZODBUserManager plugin does not
handle unicode arguments right. In the following example (taken
and modified from test_ZODBUserManager.py) we add four users
('foo', 'bar', 'baz', 'bam' ) and then search for u'abc'. I would have
expected that nothing is found. Instead, we get three matches:

  ID_LIST = ( 'foo', 'bar', 'baz', 'bam' )
  for id in ID_LIST:
      zum.addUser( id, '%<email address hidden>' % id, 'password' )
  info_list = zum.enumerateUsers( id = u'abc',
                  exact_match=False )

=> 'bar', 'baz', 'bam'

Reason:

class ZODBUserManager(...):

  def enumerateUsers(self, id, login, ...):
        ....
        if isinstance( id, str ):
            id = [ id ]
        if isinstance( login, str ):
            login = [ login ]

Because u'abc' is no str object, it is *not* transformed to a list.
Thus, later on we search for: "a", "b" and "c".

I dont know what is the best fix for this. Either we can
assume a standard encoding of the user names, then we can
encode to that string. Or we log an error, eg "string argument
required". But i think it is wrong to enumerate 'bar', 'baz' and
'bam' if we look for u'abc'.

Revision history for this message
Willi Langenberger (wlang) wrote :

attached is a patch which includes the new unicode test. we expect zero matches but get three ones.

Revision history for this message
Tres Seaver (tseaver) wrote :

The attached patch makes your test pass.

Revision history for this message
Tres Seaver (tseaver) wrote :

Thanks for the report, and the test. I have checked in the test and a fix
on the 1.4 branch, the 1.5 branch, and the trunk. Both are included in
the 1.5.3 release.

Changed in zope-pas:
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.