Yusuf Redžić commited on
Commit
245a91f
·
unverified ·
1 Parent(s): 31f91d9

cli : fix segfault on missing argument (#2700)

Browse files
Files changed (1) hide show
  1. examples/cli/cli.cpp +34 -28
examples/cli/cli.cpp CHANGED
@@ -106,6 +106,11 @@ static char * whisper_param_turn_lowercase(char * in){
106
  return in;
107
  }
108
 
 
 
 
 
 
109
  static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
110
  for (int i = 1; i < argc; i++) {
111
  std::string arg = argv[i];
@@ -124,22 +129,23 @@ static bool whisper_params_parse(int argc, char ** argv, whisper_params & params
124
  whisper_print_usage(argc, argv, params);
125
  exit(0);
126
  }
127
- else if (arg == "-t" || arg == "--threads") { params.n_threads = std::stoi(argv[++i]); }
128
- else if (arg == "-p" || arg == "--processors") { params.n_processors = std::stoi(argv[++i]); }
129
- else if (arg == "-ot" || arg == "--offset-t") { params.offset_t_ms = std::stoi(argv[++i]); }
130
- else if (arg == "-on" || arg == "--offset-n") { params.offset_n = std::stoi(argv[++i]); }
131
- else if (arg == "-d" || arg == "--duration") { params.duration_ms = std::stoi(argv[++i]); }
132
- else if (arg == "-mc" || arg == "--max-context") { params.max_context = std::stoi(argv[++i]); }
133
- else if (arg == "-ml" || arg == "--max-len") { params.max_len = std::stoi(argv[++i]); }
134
- else if (arg == "-bo" || arg == "--best-of") { params.best_of = std::stoi(argv[++i]); }
135
- else if (arg == "-bs" || arg == "--beam-size") { params.beam_size = std::stoi(argv[++i]); }
136
- else if (arg == "-ac" || arg == "--audio-ctx") { params.audio_ctx = std::stoi(argv[++i]); }
137
- else if (arg == "-wt" || arg == "--word-thold") { params.word_thold = std::stof(argv[++i]); }
138
- else if (arg == "-et" || arg == "--entropy-thold") { params.entropy_thold = std::stof(argv[++i]); }
139
- else if (arg == "-lpt" || arg == "--logprob-thold") { params.logprob_thold = std::stof(argv[++i]); }
140
- else if (arg == "-nth" || arg == "--no-speech-thold") { params.no_speech_thold = std::stof(argv[++i]); }
141
- else if (arg == "-tp" || arg == "--temperature") { params.temperature = std::stof(argv[++i]); }
142
- else if (arg == "-tpi" || arg == "--temperature-inc") { params.temperature_inc = std::stof(argv[++i]); }
 
143
  else if (arg == "-debug"|| arg == "--debug-mode") { params.debug_mode = true; }
144
  else if (arg == "-tr" || arg == "--translate") { params.translate = true; }
145
  else if (arg == "-di" || arg == "--diarize") { params.diarize = true; }
@@ -151,31 +157,31 @@ static bool whisper_params_parse(int argc, char ** argv, whisper_params & params
151
  else if (arg == "-osrt" || arg == "--output-srt") { params.output_srt = true; }
152
  else if (arg == "-owts" || arg == "--output-words") { params.output_wts = true; }
153
  else if (arg == "-olrc" || arg == "--output-lrc") { params.output_lrc = true; }
154
- else if (arg == "-fp" || arg == "--font-path") { params.font_path = argv[++i]; }
155
  else if (arg == "-ocsv" || arg == "--output-csv") { params.output_csv = true; }
156
  else if (arg == "-oj" || arg == "--output-json") { params.output_jsn = true; }
157
  else if (arg == "-ojf" || arg == "--output-json-full"){ params.output_jsn_full = params.output_jsn = true; }
158
- else if (arg == "-of" || arg == "--output-file") { params.fname_out.emplace_back(argv[++i]); }
159
  else if (arg == "-np" || arg == "--no-prints") { params.no_prints = true; }
160
  else if (arg == "-ps" || arg == "--print-special") { params.print_special = true; }
161
  else if (arg == "-pc" || arg == "--print-colors") { params.print_colors = true; }
162
  else if (arg == "-pp" || arg == "--print-progress") { params.print_progress = true; }
163
  else if (arg == "-nt" || arg == "--no-timestamps") { params.no_timestamps = true; }
164
- else if (arg == "-l" || arg == "--language") { params.language = whisper_param_turn_lowercase(argv[++i]); }
165
  else if (arg == "-dl" || arg == "--detect-language") { params.detect_language = true; }
166
- else if ( arg == "--prompt") { params.prompt = argv[++i]; }
167
- else if (arg == "-m" || arg == "--model") { params.model = argv[++i]; }
168
- else if (arg == "-f" || arg == "--file") { params.fname_inp.emplace_back(argv[++i]); }
169
- else if (arg == "-oved" || arg == "--ov-e-device") { params.openvino_encode_device = argv[++i]; }
170
- else if (arg == "-dtw" || arg == "--dtw") { params.dtw = argv[++i]; }
171
  else if (arg == "-ls" || arg == "--log-score") { params.log_score = true; }
172
  else if (arg == "-ng" || arg == "--no-gpu") { params.use_gpu = false; }
173
  else if (arg == "-fa" || arg == "--flash-attn") { params.flash_attn = true; }
174
  else if (arg == "-sns" || arg == "--suppress-nst") { params.suppress_nst = true; }
175
- else if ( arg == "--suppress-regex") { params.suppress_regex = argv[++i]; }
176
- else if ( arg == "--grammar") { params.grammar = argv[++i]; }
177
- else if ( arg == "--grammar-rule") { params.grammar_rule = argv[++i]; }
178
- else if ( arg == "--grammar-penalty") { params.grammar_penalty = std::stof(argv[++i]); }
179
  else {
180
  fprintf(stderr, "error: unknown argument: %s\n", arg.c_str());
181
  whisper_print_usage(argc, argv, params);
 
106
  return in;
107
  }
108
 
109
+ static char * requires_value_error(const std::string & arg) {
110
+ fprintf(stderr, "error: argument %s requires value\n", arg.c_str());
111
+ exit(0);
112
+ }
113
+
114
  static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
115
  for (int i = 1; i < argc; i++) {
116
  std::string arg = argv[i];
 
129
  whisper_print_usage(argc, argv, params);
130
  exit(0);
131
  }
132
+ #define ARGV_NEXT (((i + 1) < argc) ? argv[++i] : requires_value_error(arg))
133
+ else if (arg == "-t" || arg == "--threads") { params.n_threads = std::stoi(ARGV_NEXT); }
134
+ else if (arg == "-p" || arg == "--processors") { params.n_processors = std::stoi(ARGV_NEXT); }
135
+ else if (arg == "-ot" || arg == "--offset-t") { params.offset_t_ms = std::stoi(ARGV_NEXT); }
136
+ else if (arg == "-on" || arg == "--offset-n") { params.offset_n = std::stoi(ARGV_NEXT); }
137
+ else if (arg == "-d" || arg == "--duration") { params.duration_ms = std::stoi(ARGV_NEXT); }
138
+ else if (arg == "-mc" || arg == "--max-context") { params.max_context = std::stoi(ARGV_NEXT); }
139
+ else if (arg == "-ml" || arg == "--max-len") { params.max_len = std::stoi(ARGV_NEXT); }
140
+ else if (arg == "-bo" || arg == "--best-of") { params.best_of = std::stoi(ARGV_NEXT); }
141
+ else if (arg == "-bs" || arg == "--beam-size") { params.beam_size = std::stoi(ARGV_NEXT); }
142
+ else if (arg == "-ac" || arg == "--audio-ctx") { params.audio_ctx = std::stoi(ARGV_NEXT); }
143
+ else if (arg == "-wt" || arg == "--word-thold") { params.word_thold = std::stof(ARGV_NEXT); }
144
+ else if (arg == "-et" || arg == "--entropy-thold") { params.entropy_thold = std::stof(ARGV_NEXT); }
145
+ else if (arg == "-lpt" || arg == "--logprob-thold") { params.logprob_thold = std::stof(ARGV_NEXT); }
146
+ else if (arg == "-nth" || arg == "--no-speech-thold") { params.no_speech_thold = std::stof(ARGV_NEXT); }
147
+ else if (arg == "-tp" || arg == "--temperature") { params.temperature = std::stof(ARGV_NEXT); }
148
+ else if (arg == "-tpi" || arg == "--temperature-inc") { params.temperature_inc = std::stof(ARGV_NEXT); }
149
  else if (arg == "-debug"|| arg == "--debug-mode") { params.debug_mode = true; }
150
  else if (arg == "-tr" || arg == "--translate") { params.translate = true; }
151
  else if (arg == "-di" || arg == "--diarize") { params.diarize = true; }
 
157
  else if (arg == "-osrt" || arg == "--output-srt") { params.output_srt = true; }
158
  else if (arg == "-owts" || arg == "--output-words") { params.output_wts = true; }
159
  else if (arg == "-olrc" || arg == "--output-lrc") { params.output_lrc = true; }
160
+ else if (arg == "-fp" || arg == "--font-path") { params.font_path = ARGV_NEXT; }
161
  else if (arg == "-ocsv" || arg == "--output-csv") { params.output_csv = true; }
162
  else if (arg == "-oj" || arg == "--output-json") { params.output_jsn = true; }
163
  else if (arg == "-ojf" || arg == "--output-json-full"){ params.output_jsn_full = params.output_jsn = true; }
164
+ else if (arg == "-of" || arg == "--output-file") { params.fname_out.emplace_back(ARGV_NEXT); }
165
  else if (arg == "-np" || arg == "--no-prints") { params.no_prints = true; }
166
  else if (arg == "-ps" || arg == "--print-special") { params.print_special = true; }
167
  else if (arg == "-pc" || arg == "--print-colors") { params.print_colors = true; }
168
  else if (arg == "-pp" || arg == "--print-progress") { params.print_progress = true; }
169
  else if (arg == "-nt" || arg == "--no-timestamps") { params.no_timestamps = true; }
170
+ else if (arg == "-l" || arg == "--language") { params.language = whisper_param_turn_lowercase(ARGV_NEXT); }
171
  else if (arg == "-dl" || arg == "--detect-language") { params.detect_language = true; }
172
+ else if ( arg == "--prompt") { params.prompt = ARGV_NEXT; }
173
+ else if (arg == "-m" || arg == "--model") { params.model = ARGV_NEXT; }
174
+ else if (arg == "-f" || arg == "--file") { params.fname_inp.emplace_back(ARGV_NEXT); }
175
+ else if (arg == "-oved" || arg == "--ov-e-device") { params.openvino_encode_device = ARGV_NEXT; }
176
+ else if (arg == "-dtw" || arg == "--dtw") { params.dtw = ARGV_NEXT; }
177
  else if (arg == "-ls" || arg == "--log-score") { params.log_score = true; }
178
  else if (arg == "-ng" || arg == "--no-gpu") { params.use_gpu = false; }
179
  else if (arg == "-fa" || arg == "--flash-attn") { params.flash_attn = true; }
180
  else if (arg == "-sns" || arg == "--suppress-nst") { params.suppress_nst = true; }
181
+ else if ( arg == "--suppress-regex") { params.suppress_regex = ARGV_NEXT; }
182
+ else if ( arg == "--grammar") { params.grammar = ARGV_NEXT; }
183
+ else if ( arg == "--grammar-rule") { params.grammar_rule = ARGV_NEXT; }
184
+ else if ( arg == "--grammar-penalty") { params.grammar_penalty = std::stof(ARGV_NEXT); }
185
  else {
186
  fprintf(stderr, "error: unknown argument: %s\n", arg.c_str());
187
  whisper_print_usage(argc, argv, params);