Issue here was that buttons_texture_context_compute() was getting scene from (button-customized) context, before the button paths (and hence, context) had been updated. So after an undo, it was getting an invalid (freed by undo) scene pointer. Now update BCONTEXT_SCENE path before calling buttons_texture_context_compute().