From ac42bca98b82afddc0862b3192698bf020436cb2 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Sat, 27 May 2023 12:19:04 +0900 Subject: [PATCH] [ruamoko] Support nil object in obj_error Segfaulting when trying to produce an error message doesn't help get the message out. Sure, `obj_error (nil...)` is a bit of an abuse, but it shouldn't segfault the engine. --- libs/ruamoko/rua_obj.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libs/ruamoko/rua_obj.c b/libs/ruamoko/rua_obj.c index 24fab22e9..f1d54d346 100644 --- a/libs/ruamoko/rua_obj.c +++ b/libs/ruamoko/rua_obj.c @@ -1100,10 +1100,14 @@ obj_verror (probj_t *probj, pr_id_t *object, int code, const char *fmt, int coun pr_type_t **args) { progs_t *pr = probj->pr; - __auto_type class = &G_STRUCT (pr, pr_class_t, object->class_pointer); + const char *name = "nil"; + if (object) { + __auto_type class = &G_STRUCT (pr, pr_class_t, object->class_pointer); + name = PR_GetString (pr, class->name); + } PR_Sprintf (pr, probj->msg, "obj_verror", fmt, count, args); - PR_RunError (pr, "%s: %s", PR_GetString (pr, class->name), probj->msg->str); + PR_RunError (pr, "%s: %s", name, probj->msg->str); } static void