diff --git a/invalid_test.go b/invalid_test.go
index <HASH>..<HASH> 100644
--- a/invalid_test.go
+++ b/invalid_test.go
@@ -323,6 +323,10 @@ var errTests = []struct {
 		`1:11: not a valid arithmetic operator`,
 	},
 	{
+		"echo $((a *))",
+		`1:11: * must be followed by an expression`,
+	},
+	{
 		"echo ${foo",
 		`1:7: reached EOF without matching token { with }`,
 	},
diff --git a/parse.go b/parse.go
index <HASH>..<HASH> 100644
--- a/parse.go
+++ b/parse.go
@@ -683,7 +683,9 @@ func (p *parser) arithmExpr(following Token) Node {
 		Op:    p.ltok,
 		X:     left,
 	}
-	b.Y = p.arithmExpr(b.Op)
+	if b.Y = p.arithmExpr(b.Op); b.Y == nil {
+		p.followErr(b.OpPos, b.Op, "an expression")
+	}
 	return b
 }
arithm: never allow a binary expr with no Y node