internal/diff: fix bug that caused hang

Change-Id: I97cf08d2dfe6064533d048bb140a5e8524fb7c00
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/4948
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/internal/diff/diff.go b/internal/diff/diff.go
index e219cce..2344a22 100644
--- a/internal/diff/diff.go
+++ b/internal/diff/diff.go
@@ -193,7 +193,7 @@
 
 	var xi, yi int
 	var xf, yf cue.FieldInfo
-	for xi < sx.Len() || yi < sx.Len() {
+	for xi < sx.Len() || yi < sy.Len() {
 		// Process zero nodes
 		for ; xi < sx.Len(); xi++ {
 			xf = sx.Field(xi)
diff --git a/internal/diff/diff_test.go b/internal/diff/diff_test.go
index e33093a..e4b7a47 100644
--- a/internal/diff/diff_test.go
+++ b/internal/diff/diff_test.go
@@ -287,6 +287,21 @@
 +     oc? :: 5
   }
 `,
+	}, {
+		x: `[_]: x: "hello"
+
+a: x: "hello"
+		`,
+		y: `[_]: x: "hello"
+
+		`,
+		kind: Modified,
+		diff: `  {
+-     a: {
+-     	x: "hello"
+-     }
+  }
+`,
 	}}
 	for _, tc := range testCases {
 		t.Run(tc.name, func(t *testing.T) {
@@ -310,7 +325,7 @@
 					t.Fatal(err)
 				}
 				if got := w.String(); got != tc.diff {
-					t.Errorf("got\n%s;\nwant\n%s", got, tc.diff)
+					t.Errorf("\ngot\n%s;\nwant\n%s", got, tc.diff)
 				}
 			}
 		})