]> git.cworth.org Git - notmuch/commit
lib/config: don't set destructor until iterator is initialized.
authorDavid Bremner <david@tethera.net>
Fri, 30 Oct 2020 00:13:01 +0000 (21:13 -0300)
committerDavid Bremner <david@tethera.net>
Fri, 30 Oct 2020 00:13:01 +0000 (21:13 -0300)
commit582e919e2769bd99064b997b05e1601ffcfe9a98
treee1300cc4e8df65a9a6f6b980b9047e38eb119fde
parentb042a59cdf8be7ad215268eee32d4cc114d312bb
lib/config: don't set destructor until iterator is initialized.

As diagnosed by Olivier Taïbi in
id:20201027100916.emry3k2wujod4xnl@galois.lan, if an exception is
thrown while the initialization is happening (e.g. if the function is
called on a closed database), then the destructor is (sometimes)
invoked on an uninitialized Xapian object.

Solve the problem by moving the setting of the destructor until after
the placement new successfully completes. It is conceivable this might
cause a memory leak, but that seems preferable to crashing, and in any
case, there seems to be nothing better to be done if the
initialization is failing things are in an undefined state by
definition.
lib/config.cc