From 59954d67f56b353ee560fa261071bf23141fb940 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Sun, 22 Dec 2024 11:55:50 +0000 Subject: [PATCH] groupsolver: fix segfault accessing solver->names. Reproduced via 'groupsolver -v 5i:l5_2b5h' (thanks to Arun Giridhar for the report). We had filled in subsolver.names, but then called latin_solver_alloc(&subsolver), which nulled out that pointer again. Solution: do those two things in the opposite order. --- latin.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/latin.c b/latin.c index a2d5713..7e38083 100644 --- a/latin.c +++ b/latin.c @@ -819,17 +819,18 @@ static int latin_solver_recurse } else { newctx = ctx; } + if (latin_solver_alloc(&subsolver, outgrid, o)) { #ifdef STANDALONE_SOLVER - subsolver.names = solver->names; + subsolver.names = solver->names; #endif - if (latin_solver_alloc(&subsolver, outgrid, o)) ret = latin_solver_top(&subsolver, diff_recursive, diff_simple, diff_set_0, diff_set_1, diff_forcing, diff_recursive, usersolvers, valid, newctx, ctxnew, ctxfree); - else + } else { ret = diff_impossible; + } latin_solver_free(&subsolver); if (ctxnew) ctxfree(newctx);