<div dir="ltr">Hi<br><br>Here is a patch that fixes issue with corrupted search attributes while using LDAPObject.search_s().<br><br>The problem happens when converting attrlist argument from python list to C char ** array. The problematic code is in attrs_from_List() function in Modules/LDAPObject.c:<br><br>    attrs[i] = PyString_AsString(item);<br>    Py_DECREF(item);<br><br>If the item happens to have ref count 1 before executing the above, the pointer assigned to attrs[i] will become invalid. The LDAP search request send out will possibly have mangled search attributes.<br><br>I run into this problem while using some LDAP code under pypy. Here is a simple script that reproduces the problem:<br><br><a href="https://gist.github.com/elmirjagudin/6d7aadaa1825901ed73d">https://gist.github.com/elmirjagudin/6d7aadaa1825901ed73d</a><br><br>In the attached patch I have modified the conversion from python to C type to use PySequence_Fast* functions. Using PySequence_Fast() call we fetch a pointer to a temporary python sequence object. We keep track of the object and decrement the it's ref counter after the call to underlying ldap_search_ext() C function. Thus we keep attrs pointers valid during that call.<br><br><br>Regards,<br>Elmir<br></div>