proc/variables: protect form invalid G struct in parseG
A waitreason string that has invalid length (because the G struct is corrupted or being modified) could cause a crash.
This commit is contained in:
parent
5390801904
commit
40b482130a
@ -546,6 +546,9 @@ func TestNextConcurrentVariant2(t *testing.T) {
|
||||
var vval int64
|
||||
for {
|
||||
v, err := evalVariable(p, "n")
|
||||
for _, thread := range p.ThreadList() {
|
||||
proc.GetG(thread)
|
||||
}
|
||||
assertNoError(err, t, "EvalVariable")
|
||||
vval, _ = constant.Int64Val(v.Value)
|
||||
if bp, _, _ := p.CurrentThread().Breakpoint(); bp == nil {
|
||||
|
@ -380,7 +380,10 @@ func (gvar *Variable) parseG() (*G, error) {
|
||||
sp, _ := constant.Int64Val(schedVar.fieldVariable("sp").Value)
|
||||
id, _ := constant.Int64Val(gvar.fieldVariable("goid").Value)
|
||||
gopc, _ := constant.Int64Val(gvar.fieldVariable("gopc").Value)
|
||||
waitReason := constant.StringVal(gvar.fieldVariable("waitreason").Value)
|
||||
waitReason := ""
|
||||
if wrvar := gvar.fieldVariable("waitreason"); wrvar.Value != nil {
|
||||
waitReason = constant.StringVal(wrvar.Value)
|
||||
}
|
||||
var stackhi uint64
|
||||
if stackVar := gvar.fieldVariable("stack"); stackVar != nil {
|
||||
if stackhiVar := stackVar.fieldVariable("hi"); stackhiVar != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user