redox-os issueshttps://gitlab.redox-os.org/groups/redox-os/-/issues2018-06-13T17:19:47Zhttps://gitlab.redox-os.org/redox-os/rusttype/-/issues/48What is the status of the project?2018-06-13T17:19:47ZJeremy SollerWhat is the status of the project?*Created by: ozkriff*
@dylanede What are the current status and future plans of the project? Rusttype works fine right now, but it doesn't seem to be actively maintained for a long time.*Created by: ozkriff*
@dylanede What are the current status and future plans of the project? Rusttype works fine right now, but it doesn't seem to be actively maintained for a long time.https://gitlab.redox-os.org/redox-os/ion/-/issues/448Remove @len() and Migrate Logic Into $len()2020-12-11T22:06:06ZMichael Aaron Murphymmstick@pm.meRemove @len() and Migrate Logic Into $len()Now that we have support for providing expressions to methods, the `$len()` method should be made more versatile. If an array is passed into it, return the number of elements in the array. Once that's done, there's no longer a need for `...Now that we have support for providing expressions to methods, the `$len()` method should be made more versatile. If an array is passed into it, return the number of elements in the array. Once that's done, there's no longer a need for `@len()`.https://gitlab.redox-os.org/redox-os/ion/-/issues/446Ability To Drop Array Variables2018-06-12T14:22:02ZMichael Aaron Murphymmstick@pm.meAbility To Drop Array VariablesThe `drop` builtin should take an `-a` flag that will signify to drop array variables.The `drop` builtin should take an `-a` flag that will signify to drop array variables.https://gitlab.redox-os.org/redox-os/ion/-/issues/445Brace Ranges Are Invalid2018-06-12T14:22:02ZMichael Aaron Murphymmstick@pm.meBrace Ranges Are Invalid- The exclusive range syntax (`..`) is incorrect. `echo {1..5}` should print `1 2 3 4`.
- Inclusive ranges (`...`) aren't working. `echo {1...5}` should print `1 2 3 4 5`
- The exclusive range syntax (`..`) is incorrect. `echo {1..5}` should print `1 2 3 4`.
- Inclusive ranges (`...`) aren't working. `echo {1...5}` should print `1 2 3 4 5`
https://gitlab.redox-os.org/redox-os/tfs/-/issues/56SECTOR SIZE is not optimal2018-06-13T19:39:49ZJeremy SollerSECTOR SIZE is not optimal*Created by: fneddy*
the SECTOR_SIZE ist currently [set to 512 Bytes](https://github.com/redox-os/tfs/blob/master/core/src/disk/mod.rs#L11)
pub const SECTOR_SIZE: usize = 512;
Current flash storage systems (SSDs/SD) use intern...*Created by: fneddy*
the SECTOR_SIZE ist currently [set to 512 Bytes](https://github.com/redox-os/tfs/blob/master/core/src/disk/mod.rs#L11)
pub const SECTOR_SIZE: usize = 512;
Current flash storage systems (SSDs/SD) use internally a minimal structure of 4k to 4mb.
Increasing the SECTOR_SIZE would probably enhance the speed. Through it might not be practical due to memory waste.
Perhaps there are other solutions for this problem. (additional translation/buffer level, or variable sector size). https://gitlab.redox-os.org/redox-os/redox/-/issues/1001gawk does not build with the newest commit2018-06-15T11:40:01ZJeremy Sollergawk does not build with the newest commit*Created by: Csega*
**Reproduction**: use the latest bootstrap.sh, then cd redox, then make all
**Expected behavior**: build redox correctly
**Actual behavior**: gawk does not build
**Build information**: `rustc -V`: rustc 1.20...*Created by: Csega*
**Reproduction**: use the latest bootstrap.sh, then cd redox, then make all
**Expected behavior**: build redox correctly
**Actual behavior**: gawk does not build
**Build information**: `rustc -V`: rustc 1.20.0-nightly (ae98ebfcb 2017-07-20)
`git rev-parse HEAD`: c8d7b6d773a70170c312da7d21f2a506b578305b
`qemu-i386 -version`: qemu-i386 version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.14), Copyright (c) 2003-2008 Fabrice Bellard
`uname -a`: Linux csega-eos-loki 4.4.0-83-generic #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
**Misc**: the exact output:
make[3]: Entering directory '/home/csega/redox/cookbook/recipes/gawk/build'
x86_64-elf-redox-gcc -g -O2 -DNDEBUG -o gawk array.o awkgram.o builtin.o cint_array.o command.o debug.o eval.o ext.o field.o floatcomp.o gawkapi.o gawkmisc.o int_array.o io.o main.o mpfr.o msg.o node.o profile.o re.o replace.o str_array.o symbol.o version.o support/libsupport.a -lm
main.o: In function `load_procinfo':
/home/csega/redox/cookbook/recipes/gawk/build/main.c:1003: undefined reference to `getppid'
collect2: error: ld returned 1 exit status
Makefile:648: recipe for target 'gawk' failed
make[3]: *** [gawk] Error 1
make[3]: Leaving directory '/home/csega/redox/cookbook/recipes/gawk/build'
Makefile:727: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/home/csega/redox/cookbook/recipes/gawk/build'
Makefile:552: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/home/csega/redox/cookbook/recipes/gawk/build'
./repo.sh failed.mk/filesystem.mk:2: recipe for target 'build/filesystem.bin' failed
make: *** [build/filesystem.bin] Error 1
------https://gitlab.redox-os.org/redox-os/ion/-/issues/441Tracking Issue: List of Methods in Ion2021-06-01T11:15:56ZMichael Aaron Murphymmstick@pm.meTracking Issue: List of Methods in Ion# String Methods
String methods return strings
- [x] $len(string) -> n string
- [x] $len(array) -> n string (@mmstick)
- [x] $len_bytes(string) -> n string
- [x] $join(array) -> string
- [x] $find(string, string) -> n string
- [x] $sta...# String Methods
String methods return strings
- [x] $len(string) -> n string
- [x] $len(array) -> n string (@mmstick)
- [x] $len_bytes(string) -> n string
- [x] $join(array) -> string
- [x] $find(string, string) -> n string
- [x] $starts_with(string, string) -> 0/1 string (@mmstick)
- [x] $ends_with(string, string) -> 0/1 string (@mmstick)
- [x] $contains(string, string) -> 0/1 string (@mmstick)
- [x] $replace(string, string) -> string (@mmstick)
- [x] $replacen(string, string) -> string (@mmstick)
- [x] $to_lowercase(string) -> string (@pithonsmear)
- [x] $to_uppercase(string) -> string (@pithonsmear)
- [x] $repeat(string, n) -> string (@mmstick)
- [x] $extension(filepath) -> string (@pithonsmear)
- [x] $basename(filepath) -> string (@pithonsmear)
- [x] $parent(filepath) -> string (@pithonsmear)
- [x] $filename(filepath) -> string (@pithonsmear)
- [ ] $or(string, expr) -> string
- If the given string does not exist, use the given expression
- [x] $reverse(string) -> string (@pithonsmear)
- [ ] $fold(array, string) -> string
- Apply a reduce/fold function to an array
- The supplied string should name a command to apply to the array
- [ ] $open(string) -> string
- Open a file and buffer the entire file into memory
- [x] $regex_replace(string, string)
- Same as $replace(), but the pattern is a regex expression
# Array Methods
Array methods return arrays
- [x] @split(string, opt<string>) -> array
- [x] @bytes(string) -> array
- [x] @chars(string) -> array
- [x] @graphemes(string) -> array
- [x] @reverse(array) -> array
- [x] @lines(string) -> array
- Split a given string by newlines
- [ ] @filter(array, string) -> array
- Apply a filter command to each element in the array
- Exit status determines which values to filter
- `@filter(array, x => matches $x '([F])\w+')`
- [ ] @map(array, string) -> array
- Apply a command to each element in the array
- Output of the command is the new value for that index
- `@map(array, x => calc $x + $x)`
- [ ] @open(array, opt<string>) -> array
- If no pattern string is supplied, split the file by newlines
- [x] @split_at(string, n) -> [string, string]
- Splits a string into a two-element array; Rust's std
- [ ] @split_args(string)
- Provides an interface for the `ArgumentSplitter` functionality in the shell.Ion Shell v1.0.0https://gitlab.redox-os.org/redox-os/ion/-/issues/439Possible Algebraic Data Types / Enum Support?2021-06-01T11:58:08ZMichael Aaron Murphymmstick@pm.mePossible Algebraic Data Types / Enum Support?Another feature that would give Ion an advantage is to support algebraic data types / enums. We just need to figure out a syntax that would make sense for a shell language. Here's an example of how it might look like.
```sh
# Create an ...Another feature that would give Ion an advantage is to support algebraic data types / enums. We just need to figure out a syntax that would make sense for a shell language. Here's an example of how it might look like.
```sh
# Create an enum pattern
enum Action = Withdraw(amount:int) Deposit(amount:int)
while true
echo -n "Enter the action to perform"; read input
match input
case 1
echo -n "Enter amount to withdraw: "; read amount
# Assign a variable that is an enum
let action:enum = Action:Withdraw($(ftoi $amount -d 2))
break
case 2
echo -n "Enter amount to deposit: "; read amount
# Assign a variable that is an enum
let action:enum = Action:Deposit($(ftoi $amount -d 2))
break
case 3; echo "Exiting"; exit
case _; echo "Invalid Input"
end
end
# Match on a pattern that represents an enum
# Requires that all variants are handled
match action:enum
case Withdraw(amount)
echo "Withdrawing $amount"
case Deposit(amount)
echo "Withdrawing $amount"
end
```
No reason to not go the extra mile in creating a next-gen *nix shell.unplannedhttps://gitlab.redox-os.org/redox-os/redox/-/issues/1000It seem like can not Startup Arch2023-06-13T04:42:50ZJeremy SollerIt seem like can not Startup Arch*Created by: 3442853561*
I waited about ten minutes
Just stay in "Startup Arch"*Created by: 3442853561*
I waited about ten minutes
Just stay in "Startup Arch"https://gitlab.redox-os.org/redox-os/redox/-/issues/999It still can't run in VMware(Windows 10)2023-06-13T04:42:50ZJeremy SollerIt still can't run in VMware(Windows 10)*Created by: 3442853561*
like https://github.com/redox-os/redox/issues/821*Created by: 3442853561*
like https://github.com/redox-os/redox/issues/821https://gitlab.redox-os.org/redox-os/ion/-/issues/437wildcard expansion after escaping2018-06-12T18:48:48ZMichael Aaron Murphymmstick@pm.mewildcard expansion after escaping*Created by: aeosynth*
```
# touch 'f x' 'f y'
# rm f\ *
rm: cannot remove ' *': No such file or directory
rm: cannot remove 'f': No such file or directory
# rm f*
```*Created by: aeosynth*
```
# touch 'f x' 'f y'
# rm f\ *
rm: cannot remove ' *': No such file or directory
rm: cannot remove 'f': No such file or directory
# rm f*
```stratactstratact1@gmail.comstratactstratact1@gmail.comhttps://gitlab.redox-os.org/redox-os/ion/-/issues/436Move cursors one word with Ctrl+Arrows2018-06-12T14:22:02ZMichael Aaron Murphymmstick@pm.meMove cursors one word with Ctrl+Arrows*Created by: jhasse*
Currently Ctrl+Left/Right doesn't move the cursor at all. It would be very convenient if this could move between word boundaries, similar to input fields in GUI applications on Windows/Linux or in Fish.*Created by: jhasse*
Currently Ctrl+Left/Right doesn't move the cursor at all. It would be very convenient if this could move between word boundaries, similar to input fields in GUI applications on Windows/Linux or in Fish.https://gitlab.redox-os.org/redox-os/ion/-/issues/434ion -c is strange with pipes2018-06-12T14:22:02ZMichael Aaron Murphymmstick@pm.meion -c is strange with pipes*Created by: bb010g*
With an executable `crash.ion` consisting of
```
#!/usr/bin/env ion
ion -c "cat | cat" | cat
```
You can get two crashes showing up. The first is reproducible with just `ion -c "echo hi | cat" | cat`, which run...*Created by: bb010g*
With an executable `crash.ion` consisting of
```
#!/usr/bin/env ion
ion -c "cat | cat" | cat
```
You can get two crashes showing up. The first is reproducible with just `ion -c "echo hi | cat" | cat`, which runs like so:
```
nixovo% ./crash.ion
thread '<unnamed>' panicked at 'begin <= end (1 <= 0) when slicing `|`', /checkout/src/libcore/str/mod.rs:2137:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.
hi
zsh: abort (core dumped) ./crash.ion
```
The second happens with `-c "cat | cat"` after you type a character:
```
nixovo% ./crash.ion
thread '<unnamed>' panicked at 'begin <= end (1 <= 0) when slicing `|`', /checkout/src/libcore/str/mod.rs:2137:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.
zsh: abort (core dumped) ./crash.ion
nixovo% [key pressed] ion: bg [0] 17391
ion: ([0] 17392) Stopped
```
Pressing enter fixes the prompt. If you run this from inside `ion`:
```
nixovo% ion
bb010g:/home/bb010g# ./crash.ion
thread '<unnamed>' panicked at 'begin <= end (1 <= 0) when slicing `|`', /checkout/src/libcore/str/mod.rs:2137:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.
ion: process ended by signal
bb010g:/home/bb010g# [key pressed] ion: bg [0] 17419
ion: ([0] 17420) Stopped
bb010g:/home/bb010g# [q pressed]qzsh: suspended (tty input) ion
%
nixovo% jobs
[1] + suspended (tty input) ion
```
At this point you have to `kill -9` the remaining `ion` process.https://gitlab.redox-os.org/redox-os/rusttype/-/issues/47Space character (0x0020) has no extents2018-06-13T17:19:47ZJeremy SollerSpace character (0x0020) has no extents*Created by: fschutt*
When trying to get the extents of the space character of any font (Unicode 0x0020, a literal "space"), the glyphs `extents` are `None`, which is wrong (`freetype-rs` shows a height of 2000 units, FontForge confirms...*Created by: fschutt*
When trying to get the extents of the space character of any font (Unicode 0x0020, a literal "space"), the glyphs `extents` are `None`, which is wrong (`freetype-rs` shows a height of 2000 units, FontForge confirms this). This makes it difficult to calculate the width of a space.
Seems to be a problem with `stb_truetype`. To reproduce:
```
let glyph = font.glyph(rusttype::CodepointOrGlyphId::Codepoint(rusttype::Codepoint(0x0020)));
let glyph_metrics = glyph.standalone().get_data().unwrap();
println!("{:?}", glyph_metrics.extents); // None - correct answer would be a Rect with a height of 2000
```https://gitlab.redox-os.org/redox-os/rusttype/-/issues/45Support unscaled fonts2018-06-13T17:19:47ZJeremy SollerSupport unscaled fonts*Created by: fschutt*
Currently, you cannot get a fonts ascender / descender without scaling the font. Freetype as a `FT_NO_SCALE`, which just gives you the raw metrics for the font. There is a Glyph::unscaled() thing, but it doesn't he...*Created by: fschutt*
Currently, you cannot get a fonts ascender / descender without scaling the font. Freetype as a `FT_NO_SCALE`, which just gives you the raw metrics for the font. There is a Glyph::unscaled() thing, but it doesn't help, really. The font itself has to be unscaled to get the ascender and descender correctly.
The function `Font::v_metrics(&self, scale: Scale) -> VMetrics` should accept a `NoScale` or similar as the `Scale` parameter.https://gitlab.redox-os.org/redox-os/rusttype/-/issues/44Get the postscript name of a font2018-06-13T17:19:47ZJeremy SollerGet the postscript name of a font*Created by: fschutt*
There is currently no way to get the postscript name of a font (i.e. "Roboto-Medium"). This is often very useful for identifying fonts. Is this currently planned?*Created by: fschutt*
There is currently no way to get the postscript name of a font (i.e. "Roboto-Medium"). This is often very useful for identifying fonts. Is this currently planned?https://gitlab.redox-os.org/redox-os/tfs/-/issues/54Concerns with the Speck Cipher2018-06-13T19:39:49ZJeremy SollerConcerns with the Speck Cipher*Created by: bitshark*
I would like to raise there exist academic concerns (and perhaps more common sense concerns post-Vault7) with the Speck cipher.. Frankly it reminds me of the Clipper chip, or the fiasco surrounding Dual_EC_DRBG. ...*Created by: bitshark*
I would like to raise there exist academic concerns (and perhaps more common sense concerns post-Vault7) with the Speck cipher.. Frankly it reminds me of the Clipper chip, or the fiasco surrounding Dual_EC_DRBG. Or even the backdoors that were inserted in OpenBSD IPSEC stack in the early days of the internet...
Some brief history of three-letter agency backdoors
1. [The Strange Story of Dual_EC_DRBG](https://www.schneier.com/blog/archives/2007/11/the_strange_sto.html)
2. [How far did the NSA go to weaken cryptography standards?](https://www.theverge.com/2013/9/11/4718694/how-far-did-the-nsa-go-to-weaken-cryptography-standards)
3. [Why I Abandoned OpenBSD and Why You Should Too…](http://www.trollaxor.com/2013/07/why-i-abandoned-openbsd-and-why-you.html)
4. [FBI accused of planting backdoor in OpenBSD IPSEC stack](https://arstechnica.com/information-technology/2010/12/fbi-accused-of-planting-backdoor-in-openbsd-ipsec-stack/)
Regarding Simon/Speck, I'd like to share this quote: "Contrary to common practice, the designers of Simon did not provide any security arguments for the ciphers. ( [Ashur, 2015](https://eprint.iacr.org/2015/285.pdf) )
I am not an expert here but I wanted to raise my concerns for public consideration.
While I understand that some folks have no problem running this cipher, and that I can understand and respect, I do have enough of my own misgivings that I will not be among the users of the Simon/Speck algorithms.
As a heavy user and big fan ZFS (and very interested in the progress in TFS) -- I just wanted to share my thoughts and humbly request that there be a plan to offer perhaps alternative, more conservative choice of block ciphers be considered for TFS (even it is a non-default alternative -- similar to how ZFS offers a choice of LZ4, LZJB, GZIP and ZLE for compression)
Perhaps as a second choice AES-XEX? Threefish? Salsa/ChaCha?
----
Excerpts from Slide Presentation by Tomer Ashun , entitled
Simon: NSA-designed Cipher in the Post-snowden World
(including some rather interesting direct correspondence from the folks at the NSA )
[Simon: NSA-designed Cipher in the Post-snowden World](http://www.cs.technion.ac.il/~biham/Workshops/Cryptoday/2015/Slides/ashur-presentation.pdf)
- “ ...Is there anyone at your venerable institution that can
carefully and critically review your work before you seek to
publish it? I assure you that this is in your own best
interest... ” (Doug Shors, xxxx@tycho.ncsc.mil, 29/09/2015)
- “ ...We’ve now generated a lot of data – 1024 trials for 30
rounds SIMON, and 1024 random case trials (for which we
used the full SPECK algorithm and your approximations).
In short, there’s nothing there; the two distributions are
not distinguishable by any test we can conceive of... ”
(Doug Shors, xxxx@tycho.ncsc.mil, 18/10/2015)
- “ ...Interestingly, for 18 rounds, it appears that there is
likely a distinguisher. However, it’s not a slam dunk... ”
(Doug Shors, xxxx@tycho.ncsc.mil 18/10/2015)
- “ ...then I would like to ask you to retract the claims in the
ISO Belgium expert contribution that there are weaknesses
in the Simon cipher... ” (Louis Wingers, xxxx@tycho.ncsc.mil, 16/10/2015)
-----
- Simon has been somehow based on [Parseval’s Theorem](https://en.wikipedia.org/wiki/Parseval%27s_theorem) for its design
- The NSA are pushing Simon and Speck really hard as standards
- The NSA can run 2^10 experiments each evaluating 2^32 * 2^14 linear equations in less than one night.
- The NSA does not understand the level of doubt academics have toward their work.
- It seems that as far as crypto standards go, the post-snowden world looks pretty much like the
pre-Snowden world
[Simon: NSA-designed Cipher in the Post-snowden World](http://www.cs.technion.ac.il/~biham/Workshops/Cryptoday/2015/Slides/ashur-presentation.pdf)
[Improved Linear Trails for the Block Cipher Simon](https://eprint.iacr.org/2015/285.pdf)https://gitlab.redox-os.org/redox-os/ion/-/issues/426Pipes change backslash escapes2018-06-12T14:22:03ZMichael Aaron Murphymmstick@pm.mePipes change backslash escapes*Created by: bb010g*
```
echo 'a\nb' # a\nb (as expected)
echo -e 'a\nb' # a↵b (as expected)
echo -e 'a\nb' | cat # anb
echo -e 'a\\nb' | cat # a↵b
echo -e 'a\nb' | cat | cat # anb
cat | echo ...*Created by: bb010g*
```
echo 'a\nb' # a\nb (as expected)
echo -e 'a\nb' # a↵b (as expected)
echo -e 'a\nb' | cat # anb
echo -e 'a\\nb' | cat # a↵b
echo -e 'a\nb' | cat | cat # anb
cat | echo -e 'a\nb' # anb
cat | echo -e 'a\nb' | cat # anb
```
The same behavior arises with `"a\nb"` and `a\\nb`.https://gitlab.redox-os.org/redox-os/book/-/issues/101book should explain programs and their libraries (newlib, libstd, libredox, ...)2018-09-07T01:22:53ZJeremy Sollerbook should explain programs and their libraries (newlib, libstd, libredox, ...)*Created by: skierpage*
Hi, congratulations on this amazing project.
I'm confused how programs work at all in Redox. It offers a number of big C programs and I think uses a port of newlib to make these work. But Rust programs use lib...*Created by: skierpage*
Hi, congratulations on this amazing project.
I'm confused how programs work at all in Redox. It offers a number of big C programs and I think uses a port of newlib to make these work. But Rust programs use libstd. I read in Rust-land about the difficulties of running libstd on non-standard architectures but I don't know where Redox wound up.
The only references to all this in the Redox-OS book are two mentions of newlib in passing, and https://doc.redox-os.org/book/contributing/best_practices/rusting_properly.html says "libredox should be 1-to-1 with the official libstd"
I think the best place to address this is in a section after 5.2 The kernel and before 5.4. Coreutils, called **5.x Programs and Libraries**. I'd make a pull request for this but I was unable to get Redox working, neither from the book, nor building new libc, nor from docker :-( , so here's a guess at what the chapter should say.
5.x Programs and Libraries
====================
Redox can run programs. Some programs are interpreted by a runtime for the program's language, such as a script running in the Ion shell or a Python program. Others are compiled into machine instructions that run on a particular operating system (Redox) and specific hardware (e.g. x86 compatible CPU in 64-bit mode).
* In Redox compiled binaries use the standard [ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) ("Executable and Linkable Format") format.
Programs could directly invoke Redox syscalls, but most call library functions that are higher-level and more comfortable to use. You link your program with the libraries it needs.
* Redox does not support dynamic-link libraries yet *(issue #927)*, so the libraries that a program uses are statically linked into its compiled binary.
* Most C and C++ programs call functions in a [C standard library](https://en.wikipedia.org/wiki/C_standard_library) ("libc") such as `fopen`
* Redox includes a port of the newlib Standard C library. This is how programs such as git can run on Redox. newlib has some POSIX compatibility.
* Rust programs implicitly or explicitly call functions in the Rust standard library (libstd).
* ?? ~~Redox implements a subset of this in libredox~~
* The Rust libstd now includes an implementation of its system-dependent parts (such as file access and setting environment variables) for Redox, in `src/libstd/sys/redox`. ?? Most of libstd works in Redox, so many command-line Rust programs can be compiled for Redox.
The Redox "cookbook'' project includes recipes for compiling C and Rust projects into Redox binaries.https://gitlab.redox-os.org/redox-os/ion/-/issues/425{a b} invalid brace pattern causes a panic2018-06-12T14:22:02ZMichael Aaron Murphymmstick@pm.me{a b} invalid brace pattern causes a panic*Created by: xfix*
**Reproduction**: [describe how you are able to reproduce ("trigger") this bug/issue.]
```
xfix:/# echo {a b}
```
**Expected behavior**: [describe the behavior you would expect the repro to yield.]
not pani...*Created by: xfix*
**Reproduction**: [describe how you are able to reproduce ("trigger") this bug/issue.]
```
xfix:/# echo {a b}
```
**Expected behavior**: [describe the behavior you would expect the repro to yield.]
not panic, just an error
**Actual behavior**: [describe the actual behavior, which is presented through the repro.].
```
thread '<unnamed>' panicked at 'ion: fatal error with syntax validation: unterminated brace', /home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/parser/shell_expand/words.rs:822
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace
at ./checkout/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::panicking::default_hook::{{closure}}
at ./checkout/src/libstd/sys_common/backtrace.rs:71
at ./checkout/src/libstd/sys_common/backtrace.rs:60
at ./checkout/src/libstd/panicking.rs:355
2: std::panicking::rust_panic_with_hook
at ./checkout/src/libstd/panicking.rs:371
at ./checkout/src/libstd/panicking.rs:549
3: std::panicking::begin_panic
at ./checkout/src/libstd/panicking.rs:511
4: <ion::parser::shell_expand::words::WordIterator<'a> as core::iter::iterator::Iterator>::next
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/parser/shell_expand/words.rs:822
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/parser/shell_expand/words.rs:988
5: ion::parser::shell_expand::expand_string
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/parser/shell_expand/mod.rs:142
6: ion::shell::Shell::run_pipeline
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/shell/job.rs:37
at ./checkout/src/libcore/ops.rs:2731
at ./checkout/src/libcore/option.rs:398
at ./checkout/src/libcore/iter/mod.rs:1880
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/shell/job.rs:37
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/parser/peg.rs:46
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/shell/mod.rs:496
7: <ion::shell::Shell<'a> as ion::shell::flow::FlowLogic>::execute_toplevel
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/shell/flow.rs:503
8: <ion::shell::Shell<'a> as ion::shell::flow::FlowLogic>::on_command
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/shell/flow.rs:58
9: ion::inner_main
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/shell/mod.rs:403
at ./home/xfix/.cargo/registry/src/github.com-1ecc6299db9ec823/ion-shell-1.0.5/src/main.rs:68
fish: 'env RUST_BACKTRACE=1 ~/.cargo...' terminated by signal SIGABRT (Abort)
```
**Build information**: [output of `rustc -V`, `git rev-parse HEAD`, `qemu-i386 -version`, `uname -a`, etc.]
installed using `cargo install ion-shell`, no git repository, no qemu
```
~ $ rustc -V
rustc 1.19.0-nightly (f89d8d184 2017-05-30)
~ $ uname -a
Linux orange 4.11.9-1-ARCH #1 SMP PREEMPT Wed Jul 5 18:23:08 CEST 2017 x86_64 GNU/Linux
```