mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/link: don't mangle string symbol names
String symbol names could contain weird characters as we put the string literal into the symbol name. So it may appear to need mangling. However, as string symbols are grouped into a single "go:string.*" symbol, the individual symbol names actually don't matter. So don't mangle them. Also make the mangling code more defensive in case of weird symbol names. Fixes #62098. Change-Id: I533012567a9fffab69debda934f426421c7abb04 Reviewed-on: https://go-review.googlesource.com/c/go/+/520856 Reviewed-by: Than McIntosh <thanm@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
d63c88d695
commit
b65e34f038
3 changed files with 31 additions and 8 deletions
|
|
@ -993,6 +993,11 @@ func typeSymbolMangle(name string) string {
|
|||
if strings.HasPrefix(name, "type:runtime.") {
|
||||
return name
|
||||
}
|
||||
if strings.HasPrefix(name, "go:string.") {
|
||||
// String symbols will be grouped to a single go:string.* symbol.
|
||||
// No need to mangle individual symbol names.
|
||||
return name
|
||||
}
|
||||
if len(name) <= 14 && !strings.Contains(name, "@") { // Issue 19529
|
||||
return name
|
||||
}
|
||||
|
|
@ -1007,7 +1012,7 @@ func typeSymbolMangle(name string) string {
|
|||
// instantiated symbol, replace type name in []
|
||||
i := strings.IndexByte(name, '[')
|
||||
j := strings.LastIndexByte(name, ']')
|
||||
if j == -1 {
|
||||
if j == -1 || j <= i {
|
||||
j = len(name)
|
||||
}
|
||||
hash := notsha256.Sum256([]byte(name[i+1 : j]))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue