mirror of
https://github.com/github/codeql.git
synced 2026-04-12 02:24:00 +02:00
The fix consists of three parts: * Ensure that an `Unwind` instruction is generated for functions that contain a Microsoft `__try` statement, or a function that must throw. * Do not manually introduce `Unwind` instructions for `__except` blocks, but depend on the `Unwind` that we now insert in the function. * Add missing `getExceptionSuccessorInstruction` predicate to `TranslatedMicrosoftTryExceptHandler`
55 lines
697 B
C++
55 lines
697 B
C++
// semmle-extractor-options: --microsoft
|
|
|
|
void ProbeFunction(...);
|
|
void sink(...);
|
|
|
|
void f_cpp() {
|
|
int x, y = 0;
|
|
__try {
|
|
ProbeFunction(0);
|
|
x = y;
|
|
ProbeFunction(0);
|
|
}
|
|
__except (0) {
|
|
sink(x);
|
|
}
|
|
}
|
|
|
|
void g_cpp() {
|
|
int x, y = 0;
|
|
__try {
|
|
ProbeFunction(0);
|
|
x = y;
|
|
ProbeFunction(0);
|
|
}
|
|
__finally {
|
|
sink(x);
|
|
}
|
|
}
|
|
|
|
void AfxThrowMemoryException();
|
|
|
|
void h_cpp(int b) {
|
|
int x = 0;
|
|
__try {
|
|
if (b) {
|
|
AfxThrowMemoryException();
|
|
}
|
|
}
|
|
__except (1) {
|
|
sink(x);
|
|
}
|
|
}
|
|
|
|
void throw_cpp(int b) {
|
|
int x = 0;
|
|
__try {
|
|
if (b) {
|
|
throw 1;
|
|
}
|
|
}
|
|
__except (1) {
|
|
sink(x);
|
|
}
|
|
}
|