mirror of
https://github.com/github/codeql.git
synced 2025-12-19 18:33:16 +01:00
186 lines
2.7 KiB
C++
186 lines
2.7 KiB
C++
void *__builtin_alloca(unsigned long sz);
|
|
#define alloca __builtin_alloca
|
|
|
|
void forOnce() {
|
|
for (struct { bool stop; } state = { 0 }; !state.stop; state.stop = 1) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void forOnce2() {
|
|
bool stop;
|
|
for (stop = 0; !stop; stop = 1) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void forTwice() {
|
|
for (int i = 0; i < 2; i++) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void forEver() {
|
|
for (;;) {
|
|
alloca(100); // BAD
|
|
}
|
|
}
|
|
|
|
void doTwice() {
|
|
int i = 0;
|
|
do {
|
|
alloca(100); // GOOD
|
|
} while (++i < 2);
|
|
}
|
|
|
|
void unknownStartingPoint(int i) {
|
|
for (; i < 2; i++) {
|
|
alloca(100); // BAD
|
|
}
|
|
}
|
|
|
|
int getInt();
|
|
|
|
void atMostTwice() {
|
|
int i = 0;
|
|
while (!(i >= 2 || getInt())) {
|
|
i++;
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void sometimesIncrement() {
|
|
int i = 0;
|
|
while (i < 2) {
|
|
alloca(100); // BAD
|
|
if (getInt()) {
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
void upAndDown() {
|
|
for (int i = 0; i < 2; i++) {
|
|
alloca(100); // BAD
|
|
if (getInt()) {
|
|
i--;
|
|
}
|
|
}
|
|
}
|
|
|
|
void largeBound() {
|
|
for (int i = 0; i < 10000; i++) {
|
|
alloca(100); // BAD
|
|
}
|
|
}
|
|
|
|
void largeOffset() {
|
|
int i;
|
|
if (getInt()) {
|
|
i = 9998;
|
|
} else {
|
|
i = 9997;
|
|
}
|
|
for (; i < 10000; i++) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void maybeSmallOffset() {
|
|
int i;
|
|
if (getInt()) {
|
|
i = 0;
|
|
} else {
|
|
i = 9997;
|
|
}
|
|
for (; i < 10000; i++) {
|
|
alloca(100); // BAD
|
|
}
|
|
}
|
|
|
|
void incBefore() {
|
|
int i = -1;
|
|
i++; // not understood by data flow
|
|
for (; i < 2; i++) {
|
|
alloca(100); // GOOD [FALSE POSITIVE]
|
|
}
|
|
}
|
|
|
|
void nestedAddsUp() {
|
|
for (int i = 0; i < 16; i++) {
|
|
for (int j = 0; j < 16; j++) {
|
|
alloca(100); // BAD [NOT DETECTED]
|
|
}
|
|
}
|
|
}
|
|
|
|
void nestedWithReset() {
|
|
bool stop = 0;
|
|
|
|
for (int i = 0; i < 1; i++) {
|
|
stop = 0;
|
|
do {
|
|
stop = 1;
|
|
alloca(100); // GOOD
|
|
} while (!stop);
|
|
stop = 0;
|
|
}
|
|
}
|
|
|
|
void eqFalse() {
|
|
for (int stop = 0; stop == 0; stop = 5) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void eqFalseFlipped() {
|
|
for (int stop = 0; stop == 0; stop = 0) {
|
|
alloca(100); // BAD
|
|
}
|
|
}
|
|
|
|
void neFalse() {
|
|
for (bool go_on = true; go_on != 0; go_on = false) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void eqTrue() {
|
|
for (bool go_on = false; go_on == true; go_on = false) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void countDownFor() {
|
|
for (int i = 2; i >= 0; i--) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void countDownWhile() {
|
|
int i;
|
|
i = 2;
|
|
while (--i >= 0) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void countDownAssignAdd() {
|
|
for (int i = 2; i >= 0; i = i - 1) {
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|
|
|
|
void countDownWrong() {
|
|
for (int i = 2-1; i >= 0; i++) {
|
|
alloca(100); // BAD
|
|
}
|
|
}
|
|
|
|
void countUpFromUnsigned(unsigned long i) {
|
|
while (i < 10) {
|
|
i = i + 1;
|
|
alloca(100); // GOOD
|
|
}
|
|
}
|