Skip to content

Crash if hostname is used as a loop variable #5548

@acdha

Description

@acdha

I noticed an odd crash while running a command in a loop when I picked a loop variable which matched a variable name:

cadams@tethys ~> for hostname in (cat ~/Projects/…/django-hosts); curl --fail "http://$hostname/server-status?auto"; end
<E> fish: /tmp/fish-20181228-21895-1ih942f/fish-3.0.0/src/parse_execution.cpp:408: failed assertion: retval == ENV_OK && "for loop variable should have been successfully set"
<E> fish: Backtrace:
<E> fish: 0   parse_execution_context_t::run_for_statement(tnode_t<grammar::for_header>, tnode_t<grammar::job_list>) + 902
<E> fish: 1   parse_execution_context_t::run_block_statement(tnode_t<grammar::block_statement>, block_t const*) + 98
<E> fish: 2   parse_execution_context_t::run_1_job(tnode_t<grammar::job>, block_t const*) + 618
<E> fish: 3   parse_execution_context_t::run_job_conjunction(tnode_t<grammar::job_conjunction>, block_t const*) + 128
<E> fish: 4   parse_execution_result_t parse_execution_context_t::run_job_list<grammar::job_list>(tnode_t<grammar::job_list>, block_t const*) + 107
<E> fish: 5   parse_execution_context_t::eval_node(tnode_t<grammar::job_list>, block_t const*, io_chain_t const&) + 187
<E> fish: 6   int parser_t::eval_node<grammar::job_list>(std::__1::shared_ptr<parsed_source_t const>, tnode_t<grammar::job_list>, io_chain_t const&, block_type_t, std::__1::shared_ptr<job_t>) + 231
<E> fish: 7   parser_t::eval(std::__1::shared_ptr<parsed_source_t const>, io_chain_t const&, block_type_t) + 137
<E> fish: 8   parser_t::eval(std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >, io_chain_t const&, block_type_t) + 162
<E> fish: 9   reader_run_command(parser_t&, std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> > const&) + 419
<E> fish: 10  reader_read(int, io_chain_t const&) + 1376
<E> fish: 11  main + 4946
<E> fish: 12  start + 1

[Process completed]

This reproduces with other shell built-ins (e.g. umask or history).

Versions:

cadams@tethys ~> fish --version
fish, version 3.0.0
cadams@tethys ~> brew info fish
fish: stable 3.0.0 (bottled), HEAD
User-friendly command-line shell for UNIX-like operating systems
https://fishshell.com
/usr/local/Cellar/fish/3.0.0 (953 files, 8.3MB) *
  Poured from bottle on 2019-01-08 at 09:50:51
…
cadams@tethys ~> sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.2
BuildVersion:	18C54

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething that's not working as intended

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions