Skip to content

Commit

Permalink
Fix for panic on invalid arrays on left side of assignment (#280)
Browse files Browse the repository at this point in the history
* Fix for panic on invalid arrays on left side of assignement

* bump deps including fortio/terminal
  • Loading branch information
ldemailly authored Jan 26, 2025
1 parent 0295eb9 commit 70f7098
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 21 deletions.
10 changes: 8 additions & 2 deletions eval/eval.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,17 @@ func (s *State) evalAssignment(right object.Object, node *ast.InfixExpression) o
}
switch node.Left.Value().Type() {
case token.DOT:
idxE := node.Left.(*ast.IndexExpression)
idxE, ok := node.Left.(*ast.IndexExpression)
if !ok {
return s.Errorf("assignment to non index . expression %T %s", node.Left, ast.DebugString(node.Left))
}
index := object.String{Value: idxE.Index.Value().Literal()}
return s.evalIndexAssigment(idxE.Left, index, right)
case token.LBRACKET:
idxE := node.Left.(*ast.IndexExpression)
idxE, ok := node.Left.(*ast.IndexExpression)
if !ok {
return s.Errorf("assignment to non index [] expression %T %v", node.Left, ast.DebugString(node.Left))
}
index := s.Eval(idxE.Index)
return s.evalIndexAssigment(idxE.Left, index, right)
case token.IDENT:
Expand Down
14 changes: 14 additions & 0 deletions eval/eval_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1051,3 +1051,17 @@ func TestDecrRegister(t *testing.T) {
t.Errorf("wrong result, got %q", res.Inspect())
}
}

// Test for https://github.com/grol-io/grol/issues/276
func TestArrayLeftNoPanic(t *testing.T) {
inp := `[]=0`
s := eval.NewState()
res, err := eval.EvalString(s, inp, false)
if err == nil {
t.Errorf("should have errored: %v", res)
}
expected := "<err: assignment to non index [] expression *ast.ArrayLiteral []>"
if res.Inspect() != expected {
t.Errorf("wrong result, got %q", res.Inspect())
}
}
14 changes: 7 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
module grol.io/grol

go 1.23.3
go 1.23.5

require (
fortio.org/cli v1.9.2
fortio.org/log v1.17.1
fortio.org/safecast v1.0.0
fortio.org/sets v1.2.0
fortio.org/struct2env v0.4.1
fortio.org/terminal v0.27.1
fortio.org/terminal v0.27.2
fortio.org/testscript v0.3.2 // only for tests
fortio.org/version v1.0.4
github.com/rivo/uniseg v0.4.7
golang.org/x/image v0.23.0
)

require (
fortio.org/term v0.23.0-fortio-6 // indirect
fortio.org/term v0.29.0-fortio-1 // indirect
github.com/kortschak/goroutine v1.1.2 // indirect
golang.org/x/crypto/x509roots/fallback v0.0.0-20240916204253-42ee18b96377 // indirect
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
golang.org/x/sys v0.27.0 // indirect
golang.org/x/tools v0.25.0 // indirect
golang.org/x/crypto/x509roots/fallback v0.0.0-20250118192723-a8ea4be81f07 // indirect
golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/tools v0.29.0 // indirect
)
24 changes: 12 additions & 12 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ fortio.org/sets v1.2.0 h1:FBfC7R2xrOJtkcioUbY6WqEzdujuBoZRbSdp1fYF4Kk=
fortio.org/sets v1.2.0/go.mod h1:J2BwIxNOLWsSU7IMZUg541kh3Au4JEKHrghVwXs68tE=
fortio.org/struct2env v0.4.1 h1:rJludAMO5eBvpWplWEQNqoVDFZr4RWMQX7RUapgZyc0=
fortio.org/struct2env v0.4.1/go.mod h1:lENUe70UwA1zDUCX+8AsO663QCFqYaprk5lnPhjD410=
fortio.org/term v0.23.0-fortio-6 h1:pKrUX0tKOxyEhkhLV50oJYucTVx94rzFrXc24lIuLvk=
fortio.org/term v0.23.0-fortio-6/go.mod h1:7buBfn81wEJUGWiVjFNiUE/vxWs5FdM9c7PyZpZRS30=
fortio.org/terminal v0.27.1 h1:4TQnDltqCrYEt653dXaX/r388Jj3YxahTEPmBj9MLWs=
fortio.org/terminal v0.27.1/go.mod h1:J7wmCkbBZhCNv3HPgctMOTI8WeJmoBE5BbkFzcXw19I=
fortio.org/term v0.29.0-fortio-1 h1:D1zHcUQurWucmqVO3WIAbAFZg6Hd+N20v78MEcZqcF4=
fortio.org/term v0.29.0-fortio-1/go.mod h1:fknYq/M01ez/1XHFSWTVODvzFe26JiP7IQFIFmTCJOo=
fortio.org/terminal v0.27.2 h1:kwr/SI1fCZ5iqHTWVhoWdzrNzrT7DJLg+BOsbG/D3As=
fortio.org/terminal v0.27.2/go.mod h1:2ep87Eza7dK4auM9SXWSfLoRcJd9dZIDXfA85uNvh34=
fortio.org/testscript v0.3.2 h1:ks5V+Y6H6nmeGqnVlZuLdiFwpqXemDkEnyGgCZa/ZNA=
fortio.org/testscript v0.3.2/go.mod h1:Z2kUvEDHYETV8FLxsdA6zwSZ8sZUiTNJh2Dw5c4a3Pg=
fortio.org/version v1.0.4 h1:FWUMpJ+hVTNc4RhvvOJzb0xesrlRmG/a+D6bjbQ4+5U=
Expand All @@ -22,13 +22,13 @@ github.com/kortschak/goroutine v1.1.2 h1:lhllcCuERxMIK5cYr8yohZZScL1na+JM5JYPRcl
github.com/kortschak/goroutine v1.1.2/go.mod h1:zKpXs1FWN/6mXasDQzfl7g0LrGFIOiA6cLs9eXKyaMY=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
golang.org/x/crypto/x509roots/fallback v0.0.0-20240916204253-42ee18b96377 h1:aDWu69N3Si4isYMY1ppnuoGEFypX/E5l4MWA//GPClw=
golang.org/x/crypto/x509roots/fallback v0.0.0-20240916204253-42ee18b96377/go.mod h1:kNa9WdvYnzFwC79zRpLRMJbdEFlhyM5RPFBBZp/wWH8=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
golang.org/x/crypto/x509roots/fallback v0.0.0-20250118192723-a8ea4be81f07 h1:Tuk3hxOkRoX4Xwph6/tRU1wGumEsVYM2TZfvAC6MllM=
golang.org/x/crypto/x509roots/fallback v0.0.0-20250118192723-a8ea4be81f07/go.mod h1:kNa9WdvYnzFwC79zRpLRMJbdEFlhyM5RPFBBZp/wWH8=
golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA=
golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY=
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=

0 comments on commit 70f7098

Please sign in to comment.