message/pipeline: detect unknown keys
When (d *dictionary) Lookup() is called on an non-existing key, the
`messageKeyToIndex[key]` returns 0. As 0 is also a valid entry in
messageKeyToIndex, the method returned the wrong value rather than fail.
Fixes golang/go#35587
Change-Id: Iedd1cf42f29335c2c2052b07993d7f2dfcd3cc6c
Reviewed-on: https://go-review.googlesource.com/c/text/+/207217
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cmd/gotext/examples/extract/catalog.go b/cmd/gotext/examples/extract/catalog.go
index bc6130a..65570f8 100644
--- a/cmd/gotext/examples/extract/catalog.go
+++ b/cmd/gotext/examples/extract/catalog.go
@@ -14,7 +14,10 @@
}
func (d *dictionary) Lookup(key string) (data string, ok bool) {
- p := messageKeyToIndex[key]
+ p, ok := messageKeyToIndex[key]
+ if !ok {
+ return "", false
+ }
start, end := d.index[p], d.index[p+1]
if start == end {
return "", false
diff --git a/cmd/gotext/examples/extract_http/catalog_gen.go b/cmd/gotext/examples/extract_http/catalog_gen.go
index 2c410dc..4327d34 100644
--- a/cmd/gotext/examples/extract_http/catalog_gen.go
+++ b/cmd/gotext/examples/extract_http/catalog_gen.go
@@ -14,7 +14,10 @@
}
func (d *dictionary) Lookup(key string) (data string, ok bool) {
- p := messageKeyToIndex[key]
+ p, ok := messageKeyToIndex[key]
+ if !ok {
+ return "", false
+ }
start, end := d.index[p], d.index[p+1]
if start == end {
return "", false
diff --git a/message/pipeline/generate.go b/message/pipeline/generate.go
index 2770d14..bb1f85b 100644
--- a/message/pipeline/generate.go
+++ b/message/pipeline/generate.go
@@ -297,7 +297,10 @@
}
func (d *dictionary) Lookup(key string) (data string, ok bool) {
- p := messageKeyToIndex[key]
+ p, ok := messageKeyToIndex[key]
+ if !ok {
+ return "", false
+ }
start, end := d.index[p], d.index[p+1]
if start == end {
return "", false
diff --git a/message/pipeline/testdata/ssa/catalog_gen.go b/message/pipeline/testdata/ssa/catalog_gen.go
index 539d741..dce54af 100644
--- a/message/pipeline/testdata/ssa/catalog_gen.go
+++ b/message/pipeline/testdata/ssa/catalog_gen.go
@@ -14,7 +14,10 @@
}
func (d *dictionary) Lookup(key string) (data string, ok bool) {
- p := messageKeyToIndex[key]
+ p, ok := messageKeyToIndex[key]
+ if !ok {
+ return "", false
+ }
start, end := d.index[p], d.index[p+1]
if start == end {
return "", false
diff --git a/message/pipeline/testdata/test1/catalog_gen.go.want b/message/pipeline/testdata/test1/catalog_gen.go.want
index 7d93f48..890ef51 100644
--- a/message/pipeline/testdata/test1/catalog_gen.go.want
+++ b/message/pipeline/testdata/test1/catalog_gen.go.want
@@ -14,7 +14,10 @@
}
func (d *dictionary) Lookup(key string) (data string, ok bool) {
- p := messageKeyToIndex[key]
+ p, ok := messageKeyToIndex[key]
+ if !ok {
+ return "", false
+ }
start, end := d.index[p], d.index[p+1]
if start == end {
return "", false
diff --git a/message/pipeline/testdata/test1/catalog_test.go b/message/pipeline/testdata/test1/catalog_test.go
index eeb7c25..34f8b86 100644
--- a/message/pipeline/testdata/test1/catalog_test.go
+++ b/message/pipeline/testdata/test1/catalog_test.go
@@ -23,6 +23,10 @@
key: "Hello world!\n",
want: "Hello world!\n",
}, {
+ lang: "en",
+ key: "non-existing-key\n",
+ want: "non-existing-key\n",
+ }, {
lang: "de",
key: "Hello world!\n",
want: "Hallo Welt!\n",