mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
401 lines
7.2 KiB
C
401 lines
7.2 KiB
C
struct List {
|
|
struct List* next;
|
|
};
|
|
|
|
int test1(struct List* p) {
|
|
int count = 0;
|
|
for (; p; p = p->next) {
|
|
count = count+1;
|
|
}
|
|
return count;
|
|
}
|
|
|
|
int test2(struct List* p) {
|
|
int count = 0;
|
|
for (; p; p = p->next) {
|
|
count = (count+1) % 10;
|
|
}
|
|
return count;
|
|
}
|
|
|
|
int test3(struct List* p) {
|
|
int count = 0;
|
|
for (; p; p = p->next) {
|
|
count++;
|
|
count = count % 10;
|
|
}
|
|
return count;
|
|
}
|
|
|
|
int test4() {
|
|
int i = 0;
|
|
int total = 0;
|
|
for (i = 0; i < 2; i = i+1) {
|
|
total += i;
|
|
}
|
|
return total + i;
|
|
}
|
|
|
|
int test5() {
|
|
int i = 0;
|
|
int total = 0;
|
|
for (i = 0; i < 2; i++) {
|
|
total += i;
|
|
}
|
|
return total + i;
|
|
}
|
|
|
|
int test6() {
|
|
int i = 0;
|
|
int total = 0;
|
|
for (i = 0; i+2 < 4; i = i+1) {
|
|
total += i;
|
|
}
|
|
return total + i;
|
|
}
|
|
|
|
int test7(int i) {
|
|
if (i < 4) {
|
|
if (i < 5) {
|
|
return i;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int test8(int x, int y) {
|
|
if (-1000 < y && y < 10) {
|
|
if (x < y-2) {
|
|
return x;
|
|
}
|
|
}
|
|
return y;
|
|
}
|
|
|
|
int test9(int x, int y) {
|
|
if (y == 0) {
|
|
if (x < 4) {
|
|
return 0;
|
|
}
|
|
} else {
|
|
if (x < 4) {
|
|
return 1;
|
|
}
|
|
}
|
|
return x;
|
|
}
|
|
|
|
int test10(int x, int y) {
|
|
if (y > 7) {
|
|
if (x < y) {
|
|
return 0;
|
|
}
|
|
return x;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int test11(char *p) {
|
|
char c;
|
|
c = *p;
|
|
if (c != '\0')
|
|
*p++ = '\0';
|
|
|
|
if (c == ':') {
|
|
c = *p;
|
|
if (c != '\0')
|
|
*p++ = '\0';
|
|
|
|
if (c != ',')
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
typedef unsigned long long size_type;
|
|
|
|
size_type test12_helper() {
|
|
static size_type n = 0;
|
|
return n++;
|
|
}
|
|
|
|
int test12() {
|
|
size_type Start = 0;
|
|
while (Start <= test12_helper()-1)
|
|
{
|
|
const size_type Length = test12_helper();
|
|
Start += Length + 1;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
// Tests for overflow conditions.
|
|
int test13(char c, int i) {
|
|
unsigned char uc = c;
|
|
unsigned int x = 0;
|
|
unsigned int y = x-1;
|
|
int z = i+1;
|
|
return (double)(c + i + uc + x + y + z);
|
|
}
|
|
|
|
// Regression test for ODASA-6013.
|
|
int test14(int x) {
|
|
int x0 = (int)(char)x;
|
|
int x1 = (int)(unsigned char)x;
|
|
int x2 = (int)(unsigned short)x;
|
|
int x3 = (int)(unsigned int)x;
|
|
char c0 = x;
|
|
unsigned short s0 = x;
|
|
return x0 + x1 + x2 + x3 + c0 + s0;
|
|
}
|
|
|
|
long long test15(long long x) {
|
|
return (x > 0 && x == (int)x) ? x : -1;
|
|
}
|
|
|
|
// Tests for unary operators.
|
|
int test_unary(int a) {
|
|
int total = 0;
|
|
|
|
if (3 <= a && a <= 11) {
|
|
int b = +a;
|
|
int c = -a;
|
|
total += b+c;
|
|
}
|
|
if (0 <= a && a <= 11) {
|
|
int b = +a;
|
|
int c = -a;
|
|
total += b+c;
|
|
}
|
|
if (-7 <= a && a <= 11) {
|
|
int b = +a;
|
|
int c = -a;
|
|
total += b+c;
|
|
}
|
|
if (-7 <= a && a <= 1) {
|
|
int b = +a;
|
|
int c = -a;
|
|
total += b+c;
|
|
}
|
|
if (-7 <= a && a <= 0) {
|
|
int b = +a;
|
|
int c = -a;
|
|
total += b+c;
|
|
}
|
|
if (-7 <= a && a <= -2) {
|
|
int b = +a;
|
|
int c = -a;
|
|
total += b+c;
|
|
}
|
|
|
|
return total;
|
|
}
|
|
|
|
|
|
// Tests for multiplication.
|
|
int test_mult01(int a, int b) {
|
|
int total = 0;
|
|
|
|
if (3 <= a && a <= 11 && 5 <= b && b <= 23) {
|
|
int r = a*b; // 15 .. 253
|
|
total += r;
|
|
}
|
|
if (3 <= a && a <= 11 && 0 <= b && b <= 23) {
|
|
int r = a*b; // 0 .. 253
|
|
total += r;
|
|
}
|
|
if (3 <= a && a <= 11 && -13 <= b && b <= 23) {
|
|
int r = a*b; // -143 .. 253
|
|
total += r;
|
|
}
|
|
if (3 <= a && a <= 11 && -13 <= b && b <= 0) {
|
|
int r = a*b; // -143 .. 0
|
|
total += r;
|
|
}
|
|
if (3 <= a && a <= 11 && -13 <= b && b <= -7) {
|
|
int r = a*b; // -143 .. -21
|
|
total += r;
|
|
}
|
|
|
|
return total;
|
|
}
|
|
|
|
// Tests for multiplication.
|
|
int test_mult02(int a, int b) {
|
|
int total = 0;
|
|
|
|
if (0 <= a && a <= 11 && 5 <= b && b <= 23) {
|
|
int r = a*b; // 0 .. 253
|
|
total += r;
|
|
}
|
|
if (0 <= a && a <= 11 && 0 <= b && b <= 23) {
|
|
int r = a*b; // 0 .. 253
|
|
total += r;
|
|
}
|
|
if (0 <= a && a <= 11 && -13 <= b && b <= 23) {
|
|
int r = a*b; // -143 .. 253
|
|
total += r;
|
|
}
|
|
if (0 <= a && a <= 11 && -13 <= b && b <= 0) {
|
|
int r = a*b; // -143 .. 0
|
|
total += r;
|
|
}
|
|
if (0 <= a && a <= 11 && -13 <= b && b <= -7) {
|
|
int r = a*b; // -143 .. 0
|
|
total += r;
|
|
}
|
|
|
|
return total;
|
|
}
|
|
|
|
// Tests for multiplication.
|
|
int test_mult03(int a, int b) {
|
|
int total = 0;
|
|
|
|
if (-17 <= a && a <= 11 && 5 <= b && b <= 23) {
|
|
int r = a*b; // -391 .. 253
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= 11 && 0 <= b && b <= 23) {
|
|
int r = a*b; // -391 .. 253
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= 11 && -13 <= b && b <= 23) {
|
|
int r = a*b; // -391 .. 253
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= 11 && -13 <= b && b <= 0) {
|
|
int r = a*b; // -143 .. 221
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= 11 && -13 <= b && b <= -7) {
|
|
int r = a*b; // -143 .. 221
|
|
total += r;
|
|
}
|
|
|
|
return total;
|
|
}
|
|
|
|
// Tests for multiplication.
|
|
int test_mult04(int a, int b) {
|
|
int total = 0;
|
|
|
|
if (-17 <= a && a <= 0 && 5 <= b && b <= 23) {
|
|
int r = a*b; // -391 .. 0
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= 0 && 0 <= b && b <= 23) {
|
|
int r = a*b; // -391 .. 0
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= 0 && -13 <= b && b <= 23) {
|
|
int r = a*b; // -391 .. 221
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= 0 && -13 <= b && b <= 0) {
|
|
int r = a*b; // 0 .. 221
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= 0 && -13 <= b && b <= -7) {
|
|
int r = a*b; // 0 .. 221
|
|
total += r;
|
|
}
|
|
|
|
return total;
|
|
}
|
|
|
|
// Tests for multiplication.
|
|
int test_mult05(int a, int b) {
|
|
int total = 0;
|
|
|
|
if (-17 <= a && a <= -2 && 5 <= b && b <= 23) {
|
|
int r = a*b; // -391 .. -10
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= -2 && 0 <= b && b <= 23) {
|
|
int r = a*b; // -391 .. 0
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= -2 && -13 <= b && b <= 23) {
|
|
int r = a*b; // -391 .. 221
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= -2 && -13 <= b && b <= 0) {
|
|
int r = a*b; // 0 .. 221
|
|
total += r;
|
|
}
|
|
if (-17 <= a && a <= -2 && -13 <= b && b <= -7) {
|
|
int r = a*b; // 14 .. 221
|
|
total += r;
|
|
}
|
|
|
|
return total;
|
|
}
|
|
|
|
int test16(int x) {
|
|
int d, i = 0;
|
|
if (x < 0) {
|
|
return -1;
|
|
}
|
|
|
|
while (i < 3) {
|
|
i++;
|
|
}
|
|
d = i;
|
|
if (x < 0) { // Comparison is always false.
|
|
if (d > -x) { // Unreachable code.
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// Test ternary expression upper bounds.
|
|
unsigned int test_ternary01(unsigned int x) {
|
|
unsigned int y1, y2, y3, y4, y5, y6, y7, y8;
|
|
y1 = x < 100 ? x : 10; // y1 < 100
|
|
y2 = x >= 100 ? 10 : x; // y2 < 100
|
|
y3 = 0;
|
|
y4 = 0;
|
|
y5 = 0;
|
|
y6 = 0;
|
|
y7 = 0;
|
|
y8 = 0;
|
|
if (x < 300) {
|
|
y3 = x ?: 5; // y3 < 300
|
|
y4 = x ?: 500; // y4 <= 500
|
|
y5 = (x+1) ?: 500; // y5 <= 300
|
|
y6 = ((unsigned char)(x+1)) ?: 5; // y6 < 256
|
|
y7 = ((unsigned char)(x+1)) ?: 500; // y7 <= 500
|
|
y8 = ((unsigned short)(x+1)) ?: 500; // y8 <= 300
|
|
}
|
|
return y1 + y2 + y3 + y4 + y5 + y6 + y7 + y8;
|
|
}
|
|
|
|
// Test ternary expression lower bounds.
|
|
unsigned int test_ternary02(unsigned int x) {
|
|
unsigned int y1, y2, y3, y4, y5;
|
|
y1 = x > 100 ? x : 110; // y1 > 100
|
|
y2 = x <= 100 ? 110 : x; // y2 > 100
|
|
y3 = 1000;
|
|
y4 = 1000;
|
|
y5 = 1000;
|
|
if (x >= 300) {
|
|
y3 = (x-300) ?: 5; // y3 >= 0
|
|
y4 = (x-200) ?: 5; // y4 >= 100
|
|
y5 = ((unsigned char)(x-200)) ?: 5; // y6 >= 0
|
|
}
|
|
return y1 + y2 + y3 + y4 + y5;
|
|
}
|
|
|
|
// Test the comma expression.
|
|
unsigned int test_comma01(unsigned int x) {
|
|
unsigned int y = x < 100 ? x : 100;
|
|
unsigned int y1;
|
|
unsigned int y2;
|
|
y1 = (++y, y);
|
|
y2 = (y++, y += 3, y);
|
|
return y1 + y2;
|
|
}
|