This patch delays the dereference adjustment until we are sure the thrown type is a pointer type. It is possible the thrown type is not a pointer and is smaller than sizeof(void*). If the thrown type is is smaller than sizeof(void*) the deference adjustment will result in a heap buffer overflow.
I audited all the call sites of can_catch(...) and there are no places where adjustedPtr is used if can_catch(...) returns false. For this reason the patch should not introduce any functionality change.
This patch fixes the following tests when using ASAN:
- unwind_01.cpp
- unwind_02.cpp
- unwind_04.cpp