Revert "builtin function: remove dead code"

This reverts commit 993b977c9b.

Fixes #11912
This commit is contained in:
Johannes Altmanninger
2025-10-08 10:30:35 +02:00
parent b6ddb56cc7
commit b7fe3190bb
10 changed files with 56 additions and 3 deletions

View File

@@ -1,6 +1,13 @@
fish ?.?.? (released ???)
=========================
fish 4.1.3 (released ???)
=========================
This release fixes the following regressions identified in 4.1.0:
- Crash on invalid :doc:`function <cmds/function>` call (:issue:`11912`).
fish 4.1.2 (released October 7, 2025)
=====================================

View File

@@ -82,6 +82,10 @@ msgstr "$status ist kein gültiger Befehl. Siehe `help conditions`"
msgid "%.*s: invalid conversion specification"
msgstr "%.*s: Ungültige Umwandlungsspezifikation"
#, c-format
msgid "%ls: function name required"
msgstr "%ls: Brauche Funktionsnamen"
#, c-format
msgid "%s"
msgstr ""

View File

@@ -80,6 +80,10 @@ msgstr ""
msgid "%.*s: invalid conversion specification"
msgstr "%.*s: invalid conversion specification"
#, c-format
msgid "%ls: function name required"
msgstr ""
#, c-format
msgid "%s"
msgstr ""

View File

@@ -181,6 +181,10 @@ msgstr ""
msgid "%.*s: invalid conversion specification"
msgstr "%.*s : spécification de conversion invalide"
#, c-format
msgid "%ls: function name required"
msgstr ""
#, c-format
msgid "%s"
msgstr ""

View File

@@ -76,6 +76,10 @@ msgstr ""
msgid "%.*s: invalid conversion specification"
msgstr ""
#, c-format
msgid "%ls: function name required"
msgstr ""
#, c-format
msgid "%s"
msgstr ""

View File

@@ -81,6 +81,10 @@ msgstr ""
msgid "%.*s: invalid conversion specification"
msgstr "%.*s: especificação de conversão inválida"
#, c-format
msgid "%ls: function name required"
msgstr ""
#, c-format
msgid "%s"
msgstr ""

View File

@@ -77,6 +77,10 @@ msgstr ""
msgid "%.*s: invalid conversion specification"
msgstr ""
#, c-format
msgid "%ls: function name required"
msgstr ""
#, c-format
msgid "%s"
msgstr ""

View File

@@ -103,6 +103,10 @@ msgstr "$status 不是有效的命令。参见 `help conditions`"
msgid "%.*s: invalid conversion specification"
msgstr "%.*s: 无效的转换规范"
#, c-format
msgid "%ls: function name required"
msgstr "%ls: 函数名称是必须的"
#, c-format
msgid "%s"
msgstr "%s"

View File

@@ -243,7 +243,19 @@ fn parse_cmd_opts(
STATUS_CMD_OK
}
fn validate_function_name(function_name: &wstr, cmd: &wstr, streams: &mut IoStreams) -> c_int {
fn validate_function_name(
argv: &mut [&wstr],
function_name: &mut WString,
cmd: &wstr,
streams: &mut IoStreams,
) -> c_int {
if argv.len() < 2 {
streams
.err
.append(wgettext_fmt!("%ls: function name required", cmd));
return STATUS_INVALID_ARGS;
}
*function_name = argv[1].to_owned();
if !valid_func_name(function_name) {
streams.err.append(wgettext_fmt!(
"%s: %s: invalid function name",
@@ -281,8 +293,8 @@ pub fn function(
let cmd = argv[0];
// A valid function name has to be the first argument.
let function_name = argv[1].to_owned();
let mut retval = validate_function_name(&function_name, cmd, streams);
let mut function_name = WString::new();
let mut retval = validate_function_name(argv, &mut function_name, cmd, streams);
if retval != STATUS_CMD_OK {
return retval;
}

View File

@@ -186,4 +186,10 @@ function foo; echo before; end
foo (functions --erase foo)
# CHECKERR: error: Unknown function 'foo'
function ()
end
# CHECKERR: {{.*}}/tests/checks/function.fish (line {{\d+}}): function: function name required
# CHECKERR: function ()
# CHECKERR: ^
exit 0