From 0b79c70935e8b6545f4d26cebc8838d76f8a36a2 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 18 Mar 2026 14:01:59 +0900 Subject: [PATCH] dump.c: consolidate error handling in mrb_dump_irep_cfunc() replace four repeated `mrb_free(mrb, bin); return MRB_DUMP_WRITE_FAULT` sequences with a single goto-based cleanup path. Co-authored-by: Claude --- src/dump.c | 57 +++++++++++++++++++++++------------------------------- 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/src/dump.c b/src/dump.c index 705f96ab3..b6e6e90d6 100644 --- a/src/dump.c +++ b/src/dump.c @@ -957,40 +957,31 @@ mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *f } size_t bin_size, bin_idx = 0; int result = mrb_dump_irep(mrb, irep, flags, &bin, &bin_size); - if (result == MRB_DUMP_OK) { - if (fprintf(fp, "#include \n") < 0) { /* for uint8_t under at least Darwin */ - mrb_free(mrb, bin); - return MRB_DUMP_WRITE_FAULT; - } - if (fprintf(fp, - "%s\n" - "const uint8_t %s[] = {", - (flags & MRB_DUMP_STATIC) ? "static" - : "#ifdef __cplusplus\n" - "extern\n" - "#endif", - initname) < 0) { - mrb_free(mrb, bin); - return MRB_DUMP_WRITE_FAULT; - } - while (bin_idx < bin_size) { - if (bin_idx % 16 == 0) { - if (fputs("\n", fp) == EOF) { - mrb_free(mrb, bin); - return MRB_DUMP_WRITE_FAULT; - } - } - if (fprintf(fp, "0x%02x,", bin[bin_idx++]) < 0) { - mrb_free(mrb, bin); - return MRB_DUMP_WRITE_FAULT; - } - } - if (fputs("\n};\n", fp) == EOF) { - mrb_free(mrb, bin); - return MRB_DUMP_WRITE_FAULT; - } - } + if (result != MRB_DUMP_OK) goto exit; + if (fprintf(fp, "#include \n") < 0) /* for uint8_t under at least Darwin */ + goto write_error; + if (fprintf(fp, + "%s\n" + "const uint8_t %s[] = {", + (flags & MRB_DUMP_STATIC) ? "static" + : "#ifdef __cplusplus\n" + "extern\n" + "#endif", + initname) < 0) + goto write_error; + while (bin_idx < bin_size) { + if (bin_idx % 16 == 0) { + if (fputs("\n", fp) == EOF) goto write_error; + } + if (fprintf(fp, "0x%02x,", bin[bin_idx++]) < 0) goto write_error; + } + if (fputs("\n};\n", fp) == EOF) goto write_error; + goto exit; + +write_error: + result = MRB_DUMP_WRITE_FAULT; +exit: mrb_free(mrb, bin); return result; }