aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/builtin.h2
-rw-r--r--src/builtin_complete.cpp12
2 files changed, 12 insertions, 2 deletions
diff --git a/src/builtin.h b/src/builtin.h
index e2a9478e..3a160195 100644
--- a/src/builtin.h
+++ b/src/builtin.h
@@ -25,7 +25,7 @@ enum
/**
Error message on missing argument
*/
-#define BUILTIN_ERR_MISSING _( L"%ls: Expected argument\n" )
+#define BUILTIN_ERR_MISSING _( L"%ls: Expected argument for option %ls\n" )
/**
Error message on invalid combination of options
diff --git a/src/builtin_complete.cpp b/src/builtin_complete.cpp
index 6c4ccbcb..e206f9ab 100644
--- a/src/builtin_complete.cpp
+++ b/src/builtin_complete.cpp
@@ -433,9 +433,19 @@ static int builtin_complete(parser_t &parser, wchar_t **argv)
break;
case 'C':
+ {
do_complete = true;
- do_complete_param = w.woptarg ? w.woptarg : reader_get_buffer();
+ const wchar_t *arg = w.woptarg ? w.woptarg : reader_get_buffer();
+ if (arg == NULL)
+ {
+ // This corresponds to using 'complete -C' in non-interactive mode
+ // See #2361
+ builtin_missing_argument(parser, argv[0], argv[w.woptind-1]);
+ return STATUS_BUILTIN_ERROR;
+ }
+ do_complete_param = arg;
break;
+ }
case 'h':
builtin_print_help(parser, argv[0], stdout_buffer);