From 3ff2e7563d6c088042e120668c6c941627a681c6 Mon Sep 17 00:00:00 2001 From: piallai <59734081+piallai@users.noreply.github.com> Date: Thu, 1 Jan 2026 21:22:11 +0100 Subject: [PATCH 1/4] remove std::exit safer regarding memory allocation --- examples/cli/main.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index 86bc1abfd..c1f5d119e 100644 --- a/examples/cli/main.cpp +++ b/examples/cli/main.cpp @@ -115,7 +115,8 @@ struct SDCliParams { if (mode_found == -1) { LOG_ERROR("error: invalid mode %s, must be one of [%s]\n", mode_c_str, SD_ALL_MODES_STR); - exit(1); + normal_exit = false; + return -1; } mode = (SDMode)mode_found; } @@ -209,19 +210,19 @@ void print_usage(int argc, const char* argv[], const std::vector& op options_list[2].print(); } -void parse_args(int argc, const char** argv, SDCliParams& cli_params, SDContextParams& ctx_params, SDGenerationParams& gen_params) { +int parse_args(int argc, const char** argv, SDCliParams& cli_params, SDContextParams& ctx_params, SDGenerationParams& gen_params) { std::vector options_vec = {cli_params.get_options(), ctx_params.get_options(), gen_params.get_options()}; if (!parse_options(argc, argv, options_vec)) { print_usage(argc, argv, options_vec); - exit(cli_params.normal_exit ? 0 : 1); + return cli_params.normal_exit ? 0 : 1; } if (!cli_params.process_and_check() || !ctx_params.process_and_check(cli_params.mode) || !gen_params.process_and_check(cli_params.mode, ctx_params.lora_model_dir)) { print_usage(argc, argv, options_vec); - exit(1); + return 1; } } @@ -469,7 +470,8 @@ int main(int argc, const char* argv[]) { SDContextParams ctx_params; SDGenerationParams gen_params; - parse_args(argc, argv, cli_params, ctx_params, gen_params); + int parsing_exit_code = parse_args(argc, argv, cli_params, ctx_params, gen_params); + if (parsing_exit_code == 0) { if (gen_params.video_frames > 4) { size_t last_dot_pos = cli_params.preview_path.find_last_of("."); std::string base_path = cli_params.preview_path; @@ -813,6 +815,6 @@ int main(int argc, const char* argv[]) { free(results); release_all_resources(); - - return 0; + } + return parsing_exit_code; } From d63de2b7f5907999eb66f3d5dde7d932cfb70d73 Mon Sep 17 00:00:00 2001 From: piallai <59734081+piallai@users.noreply.github.com> Date: Thu, 1 Jan 2026 22:21:20 +0100 Subject: [PATCH 2/4] fix: proceed vs exit code exception for -h about invalid arg (in common.hpp parse_options) --- examples/cli/main.cpp | 11 ++++++++--- examples/common/common.hpp | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index c1f5d119e..ae29b823d 100644 --- a/examples/cli/main.cpp +++ b/examples/cli/main.cpp @@ -210,11 +210,14 @@ void print_usage(int argc, const char* argv[], const std::vector& op options_list[2].print(); } -int parse_args(int argc, const char** argv, SDCliParams& cli_params, SDContextParams& ctx_params, SDGenerationParams& gen_params) { +int parse_args(int argc, const char** argv, SDCliParams& cli_params, SDContextParams& ctx_params, SDGenerationParams& gen_params, bool& proceed) { std::vector options_vec = {cli_params.get_options(), ctx_params.get_options(), gen_params.get_options()}; + proceed = true; + if (!parse_options(argc, argv, options_vec)) { print_usage(argc, argv, options_vec); + proceed = false; return cli_params.normal_exit ? 0 : 1; } @@ -222,6 +225,7 @@ int parse_args(int argc, const char** argv, SDCliParams& cli_params, SDContextPa !ctx_params.process_and_check(cli_params.mode) || !gen_params.process_and_check(cli_params.mode, ctx_params.lora_model_dir)) { print_usage(argc, argv, options_vec); + proceed = false; return 1; } } @@ -470,8 +474,9 @@ int main(int argc, const char* argv[]) { SDContextParams ctx_params; SDGenerationParams gen_params; - int parsing_exit_code = parse_args(argc, argv, cli_params, ctx_params, gen_params); - if (parsing_exit_code == 0) { + bool proceed; + int parsing_exit_code = parse_args(argc, argv, cli_params, ctx_params, gen_params, proceed); + if (proceed) { if (gen_params.video_frames > 4) { size_t last_dot_pos = cli_params.preview_path.find_last_of("."); std::string base_path = cli_params.preview_path; diff --git a/examples/common/common.hpp b/examples/common/common.hpp index 7ea95ed14..bc7796d52 100644 --- a/examples/common/common.hpp +++ b/examples/common/common.hpp @@ -413,7 +413,7 @@ static bool parse_options(int argc, const char** argv, const std::vector Date: Thu, 1 Jan 2026 22:23:06 +0100 Subject: [PATCH 3/4] remove unnecessary --- examples/cli/main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index ae29b823d..80cc311a0 100644 --- a/examples/cli/main.cpp +++ b/examples/cli/main.cpp @@ -115,7 +115,6 @@ struct SDCliParams { if (mode_found == -1) { LOG_ERROR("error: invalid mode %s, must be one of [%s]\n", mode_c_str, SD_ALL_MODES_STR); - normal_exit = false; return -1; } mode = (SDMode)mode_found; From f120852cf7964b61e90e99504c3a1021a4020f68 Mon Sep 17 00:00:00 2001 From: piallai <59734081+piallai@users.noreply.github.com> Date: Fri, 2 Jan 2026 12:14:26 +0100 Subject: [PATCH 4/4] special case for -h/--help : not an error --- examples/common/common.hpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/common/common.hpp b/examples/common/common.hpp index bc7796d52..a39dd7be5 100644 --- a/examples/common/common.hpp +++ b/examples/common/common.hpp @@ -413,7 +413,11 @@ static bool parse_options(int argc, const char** argv, const std::vector