diff options
author | Cole Faust <colefaust@google.com> | 2022-04-27 13:37:32 -0700 |
---|---|---|
committer | Cole Faust <colefaust@google.com> | 2022-04-28 16:08:02 -0700 |
commit | 35b994e1e7cee2dd2274b5b180c92ff66750cda8 (patch) | |
tree | d5e71d5958953ba90665549b12c544f08afaf93a /androidmk | |
parent | a59059f3a179d2c6de18e7ca3db7c565eba1c02e (diff) | |
download | soong-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.go | 2 | ||||
-rw-r--r-- | androidmk/parser/make_strings_test.go | 30 |
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)) |