Skip to content

Commit

Permalink
runtime: check for findmoduledatap returning nil
Browse files Browse the repository at this point in the history
The findmoduledatap function will not return nil in ordinary use, but
check for nil to try to avoid crashing when we are already crashing.

Update golang#11783.

Change-Id: If7b1adb51efab13b4c1a37b6f3c9ad22641a0b56
Reviewed-on: https://go-review.googlesource.com/12391
Run-TryBot: Ian Lance Taylor <[email protected]>
Reviewed-by: Brad Fitzpatrick <[email protected]>
  • Loading branch information
ianlancetaylor committed Jul 18, 2015
1 parent e1ee314 commit 692054e
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/runtime/symtab.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,13 @@ func pcvalue(f *_func, off int32, targetpc uintptr, strict bool) int32 {
return -1
}
datap := findmoduledatap(f.entry) // inefficient
if datap == nil {
if strict && panicking == 0 {
print("runtime: no module data for ", hex(f.entry), "\n")
throw("no module data")
}
return -1
}
p := datap.pclntable[off:]
pc := f.entry
val := int32(-1)
Expand Down Expand Up @@ -266,6 +273,9 @@ func cfuncname(f *_func) *byte {
return nil
}
datap := findmoduledatap(f.entry) // inefficient
if datap == nil {
return nil
}
return (*byte)(unsafe.Pointer(&datap.pclntable[f.nameoff]))
}

Expand All @@ -275,6 +285,9 @@ func funcname(f *_func) string {

func funcline1(f *_func, targetpc uintptr, strict bool) (file string, line int32) {
datap := findmoduledatap(f.entry) // inefficient
if datap == nil {
return "?", 0
}
fileno := int(pcvalue(f, f.pcfile, targetpc, strict))
line = pcvalue(f, f.pcln, targetpc, strict)
if fileno == -1 || line == -1 || fileno >= len(datap.filetab) {
Expand Down

0 comments on commit 692054e

Please sign in to comment.