aboutsummaryrefslogtreecommitdiff
path: root/androidmk
diff options
context:
space:
mode:
authorCole Faust <colefaust@google.com>2022-04-27 13:37:32 -0700
committerCole Faust <colefaust@google.com>2022-04-28 16:08:02 -0700
commit35b994e1e7cee2dd2274b5b180c92ff66750cda8 (patch)
treed5e71d5958953ba90665549b12c544f08afaf93a /androidmk
parenta59059f3a179d2c6de18e7ca3db7c565eba1c02e (diff)
downloadsoong-35b994e1e7cee2dd2274b5b180c92ff66750cda8.tar.gz
Fix crash in MakeString.EndsWith()
Bug: 226974242 Test: go test Change-Id: I21ff26d00ed7be145ae2c1175f1438b6e7d60834
Diffstat (limited to 'androidmk')
-rw-r--r--androidmk/parser/make_strings.go2
-rw-r--r--androidmk/parser/make_strings_test.go30
2 files changed, 31 insertions, 1 deletions
diff --git a/androidmk/parser/make_strings.go b/androidmk/parser/make_strings.go
index 803032649..416e43005 100644
--- a/androidmk/parser/make_strings.go
+++ b/androidmk/parser/make_strings.go
@@ -279,7 +279,7 @@ func (ms *MakeString) TrimRightOne() {
func (ms *MakeString) EndsWith(ch rune) bool {
s := ms.Strings[len(ms.Strings)-1]
- return s[len(s)-1] == uint8(ch)
+ return len(s) > 0 && s[len(s)-1] == uint8(ch)
}
func (ms *MakeString) ReplaceLiteral(input string, output string) {
diff --git a/androidmk/parser/make_strings_test.go b/androidmk/parser/make_strings_test.go
index fbb289bb7..e243eceef 100644
--- a/androidmk/parser/make_strings_test.go
+++ b/androidmk/parser/make_strings_test.go
@@ -217,6 +217,36 @@ func TestMakeStringWords(t *testing.T) {
}
}
+var endsWithTestCases = []struct {
+ in *MakeString
+ endsWith rune
+ expected bool
+}{
+ {
+ in: genMakeString("foo", "X", "bar ="),
+ endsWith: '=',
+ expected: true,
+ },
+ {
+ in: genMakeString("foo", "X", "bar ="),
+ endsWith: ':',
+ expected: false,
+ },
+ {
+ in: genMakeString("foo", "X", ""),
+ endsWith: '=',
+ expected: false,
+ },
+}
+
+func TestMakeStringEndsWith(t *testing.T) {
+ for _, test := range endsWithTestCases {
+ if test.in.EndsWith(test.endsWith) != test.expected {
+ t.Errorf("with:\n%q\nexpected:\n%t\ngot:\n%t", test.in.Dump(), test.expected, !test.expected)
+ }
+ }
+}
+
func dumpArray(a []*MakeString) string {
ret := make([]string, len(a))