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