From: Kevin Day Date: Sun, 8 Dec 2024 19:21:10 +0000 (-0600) Subject: Bugfix: IKI Read is not handling parameter errors properly. X-Git-Tag: 0.6.13~24 X-Git-Url: https://git.kevux.org/?a=commitdiff_plain;h=cc7546c3a44553a665da650102565ed02c631f0b;p=fll Bugfix: IKI Read is not handling parameter errors properly. The `status` variable is being re-assigned after the error bit is set. Add additional checks to prevent this from happening. --- diff --git a/level_3/iki_read/c/iki_read.c b/level_3/iki_read/c/iki_read.c index ac0a14c..bb7bcab 100644 --- a/level_3/iki_read/c/iki_read.c +++ b/level_3/iki_read/c/iki_read.c @@ -285,36 +285,38 @@ extern "C" { } } - if (main->parameters.array[iki_read_parameter_line_e].result == f_console_result_found_e) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - flockfile(main->error.to.stream); + if (F_status_is_error_not(status)) { + if (main->parameters.array[iki_read_parameter_line_e].result == f_console_result_found_e) { + if (main->error.verbosity != f_console_verbosity_quiet_e) { + flockfile(main->error.to.stream); - fl_print_format("%r%[%QThe parameter '%]", main->error.to.stream, f_string_eol_s, main->error.context, main->error.prefix, main->error.context); - fl_print_format("%[%r%r%]", main->error.to.stream, main->error.notable, f_console_symbol_long_enable_s, iki_read_long_line_s, main->error.notable); - fl_print_format("%[' requires a positive number.%]%r", main->error.to.stream, main->error.context, main->error.context, f_string_eol_s); + fl_print_format("%r%[%QThe parameter '%]", main->error.to.stream, f_string_eol_s, main->error.context, main->error.prefix, main->error.context); + fl_print_format("%[%r%r%]", main->error.to.stream, main->error.notable, f_console_symbol_long_enable_s, iki_read_long_line_s, main->error.notable); + fl_print_format("%[' requires a positive number.%]%r", main->error.to.stream, main->error.context, main->error.context, f_string_eol_s); - funlockfile(main->error.to.stream); + funlockfile(main->error.to.stream); + } + + status = F_status_set_error(F_parameter); } + else if (main->parameters.array[iki_read_parameter_line_e].result == f_console_result_additional_e) { + const f_array_length_t index = main->parameters.array[iki_read_parameter_line_e].values.array[main->parameters.array[iki_read_parameter_line_e].values.used - 1]; - status = F_status_set_error(F_parameter); - } - else if (main->parameters.array[iki_read_parameter_line_e].result == f_console_result_additional_e) { - const f_array_length_t index = main->parameters.array[iki_read_parameter_line_e].values.array[main->parameters.array[iki_read_parameter_line_e].values.used - 1]; + f_number_unsigned_t number = 0; - f_number_unsigned_t number = 0; + status = fl_conversion_dynamic_to_unsigned_detect(fl_conversion_data_base_10_c, data.argv[index], &number); - status = fl_conversion_dynamic_to_unsigned_detect(fl_conversion_data_base_10_c, data.argv[index], &number); + if (F_status_is_error(status)) { + fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_dynamic_to_unsigned_detect", F_true, iki_read_long_line_s, data.argv[index]); - if (F_status_is_error(status)) { - fll_error_parameter_integer_print(main->error, F_status_set_fine(status), "fl_conversion_dynamic_to_unsigned_detect", F_true, iki_read_long_line_s, data.argv[index]); + status = F_status_set_error(F_parameter); + } - status = F_status_set_error(F_parameter); + data.line = number; } - - data.line = number; } - if (main->parameters.array[iki_read_parameter_name_e].result == f_console_result_found_e) { + if (F_status_is_error_not(status) && main->parameters.array[iki_read_parameter_name_e].result == f_console_result_found_e) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -328,7 +330,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (main->parameters.array[iki_read_parameter_replace_e].result != f_console_result_none_e) { + if (F_status_is_error_not(status) && main->parameters.array[iki_read_parameter_replace_e].result != f_console_result_none_e) { if (main->parameters.array[iki_read_parameter_replace_e].result == f_console_result_found_e || main->parameters.array[iki_read_parameter_replace_e].values.used % 2 != 0) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -352,7 +354,7 @@ extern "C" { } } - if (main->parameters.array[iki_read_parameter_reassign_e].result != f_console_result_none_e) { + if (F_status_is_error_not(status) && main->parameters.array[iki_read_parameter_reassign_e].result != f_console_result_none_e) { if (main->parameters.array[iki_read_parameter_reassign_e].result == f_console_result_found_e || main->parameters.array[iki_read_parameter_reassign_e].values.used % 3 != 0) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -376,7 +378,7 @@ extern "C" { } } - if (main->parameters.array[iki_read_parameter_substitute_e].result != f_console_result_none_e) { + if (F_status_is_error_not(status) && main->parameters.array[iki_read_parameter_substitute_e].result != f_console_result_none_e) { if (main->parameters.array[iki_read_parameter_substitute_e].result == f_console_result_found_e || main->parameters.array[iki_read_parameter_substitute_e].values.used % 3 != 0) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -400,48 +402,50 @@ extern "C" { } } - if (main->parameters.array[iki_read_parameter_literal_e].result == f_console_result_found_e) { - if (main->parameters.array[iki_read_parameter_object_e].result == f_console_result_found_e) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_literal_s, iki_read_long_object_s); + if (F_status_is_error_not(status)) { + if (main->parameters.array[iki_read_parameter_literal_e].result == f_console_result_found_e) { + if (main->parameters.array[iki_read_parameter_object_e].result == f_console_result_found_e) { + if (main->error.verbosity != f_console_verbosity_quiet_e) { + fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_literal_s, iki_read_long_object_s); + } + + status = F_status_set_error(F_parameter); } - status = F_status_set_error(F_parameter); - } + if (main->parameters.array[iki_read_parameter_content_e].result == f_console_result_found_e) { + if (main->error.verbosity != f_console_verbosity_quiet_e) { + fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_literal_s, iki_read_long_content_s); + } - if (main->parameters.array[iki_read_parameter_content_e].result == f_console_result_found_e) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_literal_s, iki_read_long_content_s); + status = F_status_set_error(F_parameter); } - status = F_status_set_error(F_parameter); - } + if (main->parameters.array[iki_read_parameter_total_e].result == f_console_result_found_e) { + if (main->error.verbosity != f_console_verbosity_quiet_e) { + fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_literal_s, iki_read_long_total_s); + } - if (main->parameters.array[iki_read_parameter_total_e].result == f_console_result_found_e) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_literal_s, iki_read_long_total_s); + status = F_status_set_error(F_parameter); } - status = F_status_set_error(F_parameter); + data.mode = iki_read_mode_literal_e; } + else if (main->parameters.array[iki_read_parameter_object_e].result == f_console_result_found_e) { + if (main->parameters.array[iki_read_parameter_content_e].result == f_console_result_found_e) { + if (main->error.verbosity != f_console_verbosity_quiet_e) { + fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_object_s, iki_read_long_content_s); + } - data.mode = iki_read_mode_literal_e; - } - else if (main->parameters.array[iki_read_parameter_object_e].result == f_console_result_found_e) { - if (main->parameters.array[iki_read_parameter_content_e].result == f_console_result_found_e) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_object_s, iki_read_long_content_s); + status = F_status_set_error(F_parameter); } - status = F_status_set_error(F_parameter); + data.mode = iki_read_mode_object_e; } + else { - data.mode = iki_read_mode_object_e; - } - else { - - // This is the default behavior, so there is no reason to check for the -c/--content parameter. - data.mode = iki_read_mode_content_e; + // This is the default behavior, so there is no reason to check for the -c/--content parameter. + data.mode = iki_read_mode_content_e; + } } if (F_status_is_error(status)) {