From 939c9165dcd64abb4562043c227925836325182d Mon Sep 17 00:00:00 2001
From: Michael Aaron Murphy <mmstickman@gmail.com>
Date: Fri, 6 Oct 2017 16:51:45 -0400
Subject: [PATCH] Fix for #543 Closes #543

---
 Cargo.toml                       | 2 +-
 examples/glob.ion                | 2 ++
 examples/glob.out                | 6 ++++--
 src/parser/shell_expand/words.rs | 6 +++---
 4 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index bab87d8d..85c63b5a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -72,5 +72,5 @@ version_check = "0.1.3"
 [profile.release]
 # debug = true
 # rustflags = [ "-C", "target-cpu=native"]
-lto = true
+# lto = true
 panic = "abort"
diff --git a/examples/glob.ion b/examples/glob.ion
index ff060ea4..24f8c1cd 100644
--- a/examples/glob.ion
+++ b/examples/glob.ion
@@ -6,6 +6,8 @@ echo Cargo.*
 echo Cargo?toml
 echo Cargo.[tqr]oml
 echo examples/[ef]*.ion
+echo "[]"
+echo "[] []"
 mkdir glob_test
 touch glob_test/{one,two,three}
 cd glob_test
diff --git a/examples/glob.out b/examples/glob.out
index 17ff9ff8..75cbc78f 100644
--- a/examples/glob.out
+++ b/examples/glob.out
@@ -1,11 +1,13 @@
 Cargo.toml
 examples/braces.ion examples/braces.out examples/break.ion examples/break.out
-Cargo.toml
+Cargo.toml l
 Cargo.toml
 Cargo.lock Cargo.toml
 Cargo.toml
 Cargo.toml
 examples/else_if.ion examples/exists.ion examples/fail.ion examples/fibonacci.ion examples/fn.ion examples/for.ion examples/function_piping.ion
+[]
+[] []
 one three two
 three two
-three two
+three two one three two
diff --git a/src/parser/shell_expand/words.rs b/src/parser/shell_expand/words.rs
index 8670a5be..75ce36ff 100644
--- a/src/parser/shell_expand/words.rs
+++ b/src/parser/shell_expand/words.rs
@@ -1179,7 +1179,7 @@ impl<'a, E: Expander + 'a> WordIterator<'a, E> {
             for _ in 0..moves {
                 iterator.next();
             }
-            self.read += moves + 1;
+            self.read += moves;
             true
         } else {
             self.read += 1;
@@ -1278,7 +1278,7 @@ impl<'a, E: Expander + 'a> Iterator for WordIterator<'a, E> {
                         self.read += 1;
                         return Some(self.braces(&mut iterator));
                     }
-                    b'[' if !self.flags.contains(SQUOTE) => if self.glob_check(&mut iterator) {
+                    b'[' if !self.flags.contains(SQUOTE | DQUOTE) => if self.glob_check(&mut iterator) {
                         glob = true;
                     } else {
                         return Some(self.array(&mut iterator));
@@ -1398,7 +1398,7 @@ impl<'a, E: Expander + 'a> Iterator for WordIterator<'a, E> {
                         return self.next();
                     };
                 }
-                b'[' if !self.flags.contains(SQUOTE) => if self.glob_check(&mut iterator) {
+                b'[' if !self.flags.contains(SQUOTE | DQUOTE) => if self.glob_check(&mut iterator) {
                     glob = true;
                 } else {
                     return Some(WordToken::Normal(&self.data[start..self.read], glob, tilde));
-- 
GitLab