-
Adriaan de Groot authored
This code crashes in the destructor of LdapClient on FreeBSD. The crash is visible to uses who - start KOrganizer - click the "New Event" button The underlying issue is a lot like the one described in https://blogs.kde.org/2021/02/20/uniqueptr-difference-between-libstdc-and-libc-crashes-your-application There is a convoluted call-chain on destruction of LdapClient: - ~LdapClient - ~std::unique_ptr<LdapClientPrivate> - ~LdapClientPrivate - LdapClient::cancelQuery - (accesses to members of LdapClientPrivate `d`) With libcxx, the pointer in `d` is already set to nullptr and SEGV happens. I'm not sure it isn't UB, anyway, since the destructor body for LdapClient has already run. The fix moves the implementation of `cancelQuery()` into the private class. This means that the LdapClient class does a little less poking-and-prodding in the private class, but also cuts out the call-from-private-back-to-destroyed- owning-LdapClient, fixing the SEGV and possible UB.
1683a9d0