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)
}
}
})