regression bug in pywintypes SECURITY_ATTRIBUTES? reference counting?

Mark Hammond mhammond at skippinet.com.au
Thu Jan 23 06:50:50 EST 2003


Dale Nagata wrote:
> I've migrated some code from Python 1.5.2 to 2.2.2 with win32all-148, most
> works just fine.
> 
> One thing that I can't quite figure out is why code exactly like in
> ...\python\Lib\site-packages\win32\demos\service\pipeTestService.py
> 
> now gives me the following error when before it worked fine in 1.5.2:
> 
> pywintypes.error: (1336, 'CreateEvent', 'The access control list (ACL)
> structure
>  is invalid.')
> 
> the code looks something like:
> 
> def MySecurityAttributes():
>     sa = pywintypes.SECURITY_ATTRIBUTES()
> 
>     sidEveryone = pywintypes.SID()
>     sidEveryone.Initialize(SECURITY_WORLD_SID_AUTHORITY, 1)
>     sidEveryone.SetSubAuthority(0, SECURITY_WORLD_RID)
> 
>     sidCreator = pywintypes.SID()
>     sidCreator.Initialize(SECURITY_CREATOR_SID_AUTHORITY, 1)
>     sidCreator.SetSubAuthority(0, SECURITY_CREATOR_OWNER_RID)
> 
>     acl = pywintypes.ACL()
>     acl.AddAccessAllowedAce(GENERIC_READ|GENERIC_WRITE, sidEveryone)
>     acl.AddAccessAllowedAce(FILE_ALL_ACCESS, sidCreator)
> 
>     sa.SetSecurityDescriptorDacl( True, acl, False ) # bDaclPresent ...
> bDaclDefaulted
> 
>     sa.bInheritHandle = False
>     return sa
> 
> def test():
>     sa = MySecurityAttributes()
>     hEvent = win32event.CreateEvent( sa, True, False, None ) # raises
> win32api.error 1336???
> 
> If I move the code from the body of MySecurityAttributes() inline into
> test(), then it works!
> So that sounds to me like there's some kind of reference counting problem in
> the C code.
> I've checked out the code from CVS and rebuilt PyWinTypes23.dll with debug
> and
> set breakpoints, but as far as I can tell, all looks fine upon leaving
> PySECURITY_ATTRIBUTES::SetSecurityDescriptorDacl,
> so that suggests that some part of it gets garbage collected by the time
> it reaches win32event.SetEvent, which I haven't yet started debugging.
> 
> Can anybody with more reference counting experience see where the
> dangling pointer is happening?
> 
> thanks in advance,

Damn - yes, I see this too :(  I will check it out over the next few 
days.  Feel free to nag ;)

Mark.





More information about the Python-list mailing list