<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 11, 2015 at 3:39 PM, Maciej Fijalkowski <span dir="ltr"><<a href="mailto:fijall@gmail.com" target="_blank">fijall@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Elmir.<br>
<br>
I would say that it should work, however, subtle bugs are a bit expected.<br>
<br></blockquote><div>Cool! We should try to fix the bug!<br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I'm happy to help you debug it, let me know how I can reproduce it.<br></blockquote><div><br><br>The bug is pretty simple to reproduce, basically doing this query will show the bug:<br><br>l = ldap.initialize(SERVER)<br>l.simple_bind()<br>res = l.search_s(BASE_DN, <br>                 ldap.SCOPE_SUBTREE, <br>                 FILTER,<br>                 ["uid", "cn"]) # <-- these string will be mangled<br><br>Here is the complete script which shows the bug:<br><a href="https://gist.github.com/elmirjagudin/6d7aadaa1825901ed73d">https://gist.github.com/elmirjagudin/6d7aadaa1825901ed73d</a><br><br>The error happens in the python-ldap C code that converts ["uid", "cn"] array to char **.<br><br>In this file:<br><a href="http://python-ldap.cvs.sourceforge.net/viewvc/python-ldap/python-ldap/Modules/LDAPObject.c?revision=1.91&view=markup">http://python-ldap.cvs.sourceforge.net/viewvc/python-ldap/python-ldap/Modules/LDAPObject.c?revision=1.91&view=markup</a><br><br>in function attrs_from_List() there is this code (lines 289-290):<br><br>289:     attrs[i] = PyString_AsString(item);<br>290:      Py_DECREF(item);<br><br>On line 289 the assigned string is correct, however after executing line 290, the string will be corrupted.<br><br>I have noticed that under cpython, the refcount for 'item' is larger then 1. However under pypy it is always 1, and I guess after decreasing it, the 'item' is freed, and attrs[i] pointer becomes invalid.<br><br>I don't know enough about python extension C API to know if this is a problem in python-ldap C code, or in the pypy code. Any help is appreciated!<br><br>A general question, does pypy strive to be compatible with the API defined here: <a href="https://docs.python.org/2/c-api/">https://docs.python.org/2/c-api/</a> ?<br><br>Thanks in advance,<br>Elmir <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div><div class="h5"><br>
On Fri, Dec 11, 2015 at 4:07 PM, Elmir Jagudin <<a href="mailto:elmir@unity3d.com">elmir@unity3d.com</a>> wrote:<br>
> Hi<br>
><br>
> I'm trying to run an application under pypy that authenticates user with<br>
> LDAP.<br>
><br>
> It is using python-ldap module and it fails to lookup the users. The problem<br>
> is in python-ldap's c extension code. When it converts the LDAP search query<br>
> from python format to C, parts of the query are corrupted.<br>
><br>
> Is python-ldap supposed to work under pypy? How compatible is the python C<br>
> API between cpython and pypy?<br>
><br>
> Right now I can't figure out if this is a bug in python-ldap code or an<br>
> compatibility with Pypy C API.<br>
><br>
> Regards,<br>
> Elmir Jagudin<br>
><br>
</div></div>> _______________________________________________<br>
> pypy-dev mailing list<br>
> <a href="mailto:pypy-dev@python.org">pypy-dev@python.org</a><br>
> <a href="https://mail.python.org/mailman/listinfo/pypy-dev" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/pypy-dev</a><br>
><br>
</blockquote></div><br></div></div>