]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: escape % characters in symbols when reporting errors
authorKeith Randall <khr@golang.org>
Fri, 22 Oct 2021 01:28:50 +0000 (18:28 -0700)
committerKeith Randall <khr@golang.org>
Mon, 25 Oct 2021 20:41:00 +0000 (20:41 +0000)
Generic function symbols sometimes have % in them, like:

    main.B2[%2eshape.string_0].m2·f

Which confuses this code because it doesn't esacpe % when
using this string as a format string, instead of a format argument.

Or could we get rid of the . -> %2e rewrite somehow?
I think it comes from LinkString.

Change-Id: I3275501f44cf30485e9d4577e0dfa77996d4939e
Reviewed-on: https://go-review.googlesource.com/c/go/+/357837
Trust: Keith Randall <khr@golang.org>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
src/cmd/link/internal/loader/loader.go

index 9b7888e9403f73ef94a8db33b58455eb65d179c3..34c1c6a4c86c52a95e3f6aefcc1192e8ba4280ff 100644 (file)
@@ -2592,7 +2592,9 @@ type ErrorReporter struct {
 //
 func (reporter *ErrorReporter) Errorf(s Sym, format string, args ...interface{}) {
        if s != 0 && reporter.ldr.SymName(s) != "" {
-               format = reporter.ldr.SymName(s) + ": " + format
+               // Note: Replace is needed here because symbol names might have % in them,
+               // due to the use of LinkString for names of instantiating types.
+               format = strings.Replace(reporter.ldr.SymName(s), "%", "%%", -1) + ": " + format
        } else {
                format = fmt.Sprintf("sym %d: %s", s, format)
        }