Преглед изворни кода

Parse correctly mappings where the binary has been deleted

Entry mappings of the form:
 "  02e00000-02e8a000: /foo/bin (deleted)"
are currently resulting in "(deleted)" being set as the build id.
Enforce the build id to be hex, and allow unrecognized junk to
be at the end of the mapping.
Raul Silvera пре 8 година
родитељ
комит
f99c95e2cb
2 измењених фајлова са 12 додато и 4 уклоњено
  1. 3
    3
      profile/legacy_profile.go
  2. 9
    1
      profile/legacy_profile_test.go

+ 3
- 3
profile/legacy_profile.go Прегледај датотеку

@@ -57,12 +57,12 @@ var (
57 57
 	cHex           = `(?:0x)?([[:xdigit:]]+)`
58 58
 	cHexRange      = `\s*` + cHex + `[\s-]?` + oSpace + cHex + `:?`
59 59
 	cSpaceString   = `(?:\s+(\S+))?`
60
-	cSpaceHex      = `\s+([[:xdigit:]]+)`
60
+	cSpaceHex      = `(?:\s+([[:xdigit:]]+))?`
61 61
 	cSpaceAtOffset = `(?:\s+\(@([[:xdigit:]]+)\))?`
62 62
 	cPerm          = `(?:\s+([-rwxp]+))?`
63 63
 
64
-	procMapsRE  = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceHex + hexPair + spaceDigits + cSpaceString + `\s*$`)
65
-	briefMapsRE = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceString + cSpaceAtOffset + cSpaceString + `\s*$`)
64
+	procMapsRE  = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceHex + hexPair + spaceDigits + cSpaceString)
65
+	briefMapsRE = regexp.MustCompile(`^` + cHexRange + cPerm + cSpaceString + cSpaceAtOffset + cSpaceHex)
66 66
 )
67 67
 
68 68
 func isSpaceOrComment(line string) bool {

+ 9
- 1
profile/legacy_profile_test.go Прегледај датотеку

@@ -157,6 +157,14 @@ func TestParseMappingEntry(t *testing.T) {
157 157
 				File:   "/foo/bin",
158 158
 			},
159 159
 		},
160
+		{
161
+			entry: "  02e00000-02e8a000: /foo/bin (deleted)",
162
+			want: &Mapping{
163
+				Start: 0x2e00000,
164
+				Limit: 0x2e8a000,
165
+				File:  "/foo/bin",
166
+			},
167
+		},
160 168
 		{
161 169
 			entry: "  02e00000-02e8a000: /foo/bin",
162 170
 			want: &Mapping{
@@ -218,7 +226,7 @@ func TestParseMappingEntry(t *testing.T) {
218 226
 	} {
219 227
 		got, err := parseMappingEntry(test.entry)
220 228
 		if err != nil {
221
-			t.Error(err)
229
+			t.Errorf("%s: %v", test.entry, err)
222 230
 		}
223 231
 		if !reflect.DeepEqual(test.want, got) {
224 232
 			t.Errorf("%s want=%v got=%v", test.entry, test.want, got)