@@ -427,7 +427,11 @@ func (r *runner) run(fn *function, params []value, parentMem *memoryView, indent
427
427
if err != nil {
428
428
return nil , mem , r .errorAt (inst , err )
429
429
}
430
- methodSetPtr , err := mem .load (typecodePtr .addOffset (- int64 (r .pointerSize )), r .pointerSize ).asPointer (r )
430
+ typecodePtrOffset , err := typecodePtr .addOffset (- int64 (r .pointerSize ))
431
+ if err != nil {
432
+ return nil , mem , r .errorAt (inst , err ) // unlikely
433
+ }
434
+ methodSetPtr , err := mem .load (typecodePtrOffset , r .pointerSize ).asPointer (r )
431
435
if err != nil {
432
436
return nil , mem , r .errorAt (inst , err )
433
437
}
@@ -473,7 +477,11 @@ func (r *runner) run(fn *function, params []value, parentMem *memoryView, indent
473
477
if err != nil {
474
478
return nil , mem , r .errorAt (inst , err )
475
479
}
476
- methodSetPtr , err := mem .load (typecodePtr .addOffset (- int64 (r .pointerSize )), r .pointerSize ).asPointer (r )
480
+ typecodePtrOffset , err := typecodePtr .addOffset (- int64 (r .pointerSize ))
481
+ if err != nil {
482
+ return nil , mem , r .errorAt (inst , err )
483
+ }
484
+ methodSetPtr , err := mem .load (typecodePtrOffset , r .pointerSize ).asPointer (r )
477
485
if err != nil {
478
486
return nil , mem , r .errorAt (inst , err )
479
487
}
@@ -658,7 +666,10 @@ func (r *runner) run(fn *function, params []value, parentMem *memoryView, indent
658
666
locals [inst .localIndex ] = makeLiteralInt (ptrValue , int (operands [0 ].len (r )* 8 ))
659
667
continue
660
668
}
661
- ptr = ptr .addOffset (int64 (offset ))
669
+ ptr , err = ptr .addOffset (int64 (offset ))
670
+ if err != nil {
671
+ return nil , mem , r .errorAt (inst , err )
672
+ }
662
673
locals [inst .localIndex ] = ptr
663
674
if r .debug {
664
675
fmt .Fprintln (os .Stderr , indent + "gep:" , operands , "->" , ptr )
@@ -756,7 +767,10 @@ func (r *runner) run(fn *function, params []value, parentMem *memoryView, indent
756
767
if inst .opcode == llvm .Add {
757
768
// This likely means this is part of a
758
769
// unsafe.Pointer(uintptr(ptr) + offset) pattern.
759
- lhsPtr = lhsPtr .addOffset (int64 (rhs .Uint ()))
770
+ lhsPtr , err = lhsPtr .addOffset (int64 (rhs .Uint ()))
771
+ if err != nil {
772
+ return nil , mem , r .errorAt (inst , err )
773
+ }
760
774
locals [inst .localIndex ] = lhsPtr
761
775
} else if inst .opcode == llvm .Xor && rhs .Uint () == 0 {
762
776
// Special workaround for strings.noescape, see
0 commit comments