# What changed in python-ldap

> 12 changes in python-ldap 3 from its official release notes, upgrade guides and advisories: 3 breaking, 2 security. Each one cited. Sources checked 2026-10-25. HTML: https://unstale.sh/pypi/python-ldap/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## python-ldap 3

### Breaking changes

- Server-sent invalid UTF-8 is handled by throwing an error. (3.4.8) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.8)
- An fd provided to set up a new LDAPObject is owned and managed by the module; callers should not close it themselves. (3.4.8) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.8)
- Building now requires setuptools>=61; older environments fail with a clear resolver error instead of producing broken sdist metadata. (3.4.8) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.8)

### Security

- Correctly escapes output when emitting an HTML anchor. (3.4.8) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.8)
- The attrlist parameter is checked before use, avoiding memory errors caused by type mismatches. (3.4.6) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.6)

### Fixes and other changes

- VLV control now honours the contextID passed in. (3.4.8) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.8)
- Now handles an empty string correctly. (3.4.8) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.8)
- Memory and reference leaks at error-handling time have been plugged. (3.4.8) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.8)
- Use OPT_RESTART when handling EINTR. (3.4.8) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.8)
- Errors involving requestName and requestValue are fixed. (3.4.6) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.6)
- The module now actively closes sockets when finished with them. (3.4.6) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.6)
- The module now actively closes sockets when finished with them. (3.4.6) — [release notes](https://github.com/python-ldap/python-ldap/releases/tag/python-ldap-3.4.6)
