From d533e3955db945072ab2dfcca1cab57099569260 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Thu, 5 Mar 2015 17:00:18 -0800 Subject: [PATCH] cmd/internal/ld: fix package data parsing The conversion of this logic from C introduced a few subtle behavior changes. E.g., assigning "name := data[p0:]" and then "name = name[:p1-p0]" actually caused name to span the vast majority of the package data, as at the time of the second statement p0 points just after the package name and p1 points to the end of the package data. Similarly, the logic for advancing past the newline at the end of the package line changed slightly: for a "package foo safe" line, the new code would only advance up to the newline, but not past. (Albeit, in practice this doesn't matter: newlines in package data are harmless.) Lastly, "data[p0]" was incorrectly written as "data[0]" a few times. Change-Id: I49017e16ba33a627f773532b418cbf85a84f2b4b Reviewed-on: https://go-review.googlesource.com/7000 Reviewed-by: Ian Lance Taylor --- src/cmd/internal/ld/go.go | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/cmd/internal/ld/go.go b/src/cmd/internal/ld/go.go index dd2ba9ff6f..7385ce034f 100644 --- a/src/cmd/internal/ld/go.go +++ b/src/cmd/internal/ld/go.go @@ -112,7 +112,7 @@ func ldpkg(f *Biobuf, pkg string, length int64, filename string, whence int) { } p0 += 3 - for p0 < len(data) && data[0] != '\n' { + for p0 < len(data) && data[p0] != '\n' { p0++ } @@ -127,7 +127,7 @@ func ldpkg(f *Biobuf, pkg string, length int64, filename string, whence int) { } p1 += p0 - for p0 < p1 && (data[p0] == ' ' || data[0] == '\t' || data[0] == '\n') { + for p0 < p1 && (data[p0] == ' ' || data[p0] == '\t' || data[p0] == '\n') { p0++ } if p0 < p1 { @@ -143,7 +143,7 @@ func ldpkg(f *Biobuf, pkg string, length int64, filename string, whence int) { for p0 < p1 && (data[p0] == ' ' || data[p0] == '\t' || data[p0] == '\n') { p0++ } - name := data[p0:] + pname := p0 for p0 < p1 && data[p0] != ' ' && data[p0] != '\t' && data[p0] != '\n' { p0++ } @@ -153,16 +153,12 @@ func ldpkg(f *Biobuf, pkg string, length int64, filename string, whence int) { Errorexit() } - name = name[:p1-p0] + name := data[pname:p0] + for p0 < p1 && data[p0] != '\n' { + p0++ + } if p0 < p1 { - if data[p0] == '\n' { - p0++ - } else { - p0++ - for p0 < p1 && data[p0] != '\n' { - p0++ - } - } + p0++ } if pkg == "main" && name != "main" { -- 2.48.1