mirror of
https://github.com/github/codeql.git
synced 2025-12-19 18:33:16 +01:00
141 lines
2.4 KiB
C++
141 lines
2.4 KiB
C++
|
|
#include "assert.h"
|
|
|
|
#define NULL 0
|
|
#define ZERO 0
|
|
#define UI ui
|
|
#define GE >=
|
|
#define CHECK_RANGE(x, min, max) (((x) >= (min)) && ((x) <= (max)))
|
|
|
|
typedef signed short S16;
|
|
typedef unsigned short U16;
|
|
|
|
enum myEnum1 { // this enum might have a signed type
|
|
RED = 0,
|
|
GREEN,
|
|
BLUE
|
|
};
|
|
|
|
enum myEnum2 { // this enum must have a signed type
|
|
APPLE = -1,
|
|
BANANA,
|
|
PEAR
|
|
};
|
|
|
|
const int const_zero = 0;
|
|
int maybe_zero = 0;
|
|
|
|
void myFunction() {
|
|
unsigned int ui, *ui_ptr;
|
|
signed int si;
|
|
unsigned char uc;
|
|
signed char sc;
|
|
U16 u16;
|
|
S16 s16;
|
|
unsigned long long ull;
|
|
signed long long sll;
|
|
myEnum1 e1;
|
|
myEnum2 e2;
|
|
|
|
if (ui >= 0) { // violation
|
|
}
|
|
if (ui >= 1) {
|
|
}
|
|
if (ui > 0) {
|
|
}
|
|
if (ui < 0) {
|
|
}
|
|
if (UI >= ZERO) { // violation
|
|
}
|
|
if (si >= 0) {
|
|
}
|
|
if (ui_ptr >= NULL) { // unsafe, but not a violation of UnsignedGEZero.ql
|
|
}
|
|
if (uc >= 0) { // violation
|
|
}
|
|
if (sc >= 0) {
|
|
}
|
|
if (u16 >= 0) { // violation
|
|
}
|
|
if (s16 >= 0) {
|
|
}
|
|
if (ull >= 0) { // violation
|
|
}
|
|
if (sll >= 0) {
|
|
}
|
|
if (e1 >= RED) {
|
|
}
|
|
if (e2 >= APPLE) {
|
|
}
|
|
if (e2 >= BANANA) {
|
|
}
|
|
if (e2 >= 0) {
|
|
}
|
|
|
|
if (ui >= const_zero) { // violation
|
|
}
|
|
if (ui >= maybe_zero) {
|
|
}
|
|
|
|
if ((unsigned int)si >= 0) { // violation
|
|
}
|
|
if ((signed int)ui >= 0) {
|
|
}
|
|
if ((unsigned char)ui >= 0) { // violation
|
|
}
|
|
if ((signed char)ui >= 0) {
|
|
}
|
|
if ((unsigned char)si >= 0) { // violation
|
|
}
|
|
if ((signed char)si >= 0) {
|
|
}
|
|
if ((signed int)uc >= 0) { // violation
|
|
}
|
|
if ((unsigned int)uc >= 0) { // violation
|
|
}
|
|
if ((signed int)sc >= 0) {
|
|
}
|
|
if ((unsigned int)sc >= 0) { // violation
|
|
}
|
|
|
|
assert(ui >= 0); // violation
|
|
assert(si >= 0);
|
|
|
|
CHECK_RANGE(ui, 0, 10); // reasonable use
|
|
CHECK_RANGE(si, 0, 10);
|
|
CHECK_RANGE(e1, RED, BLUE);
|
|
CHECK_RANGE(e2, APPLE, PEAR);
|
|
CHECK_RANGE(e2, BANANA, PEAR);
|
|
CHECK_RANGE(e2, 0, PEAR);
|
|
|
|
assert(ui >= 0 && ui <= 100); // violation
|
|
assert(CHECK_RANGE(ui, 0, 10)); // reasonable use
|
|
assert(UI >= ZERO); // violation (not detected)
|
|
assert(ui GE 0); // violation
|
|
|
|
if ((unsigned char)si >= 0) { // violation
|
|
}
|
|
if ((unsigned char)(signed int)si >= 0) { // violation
|
|
}
|
|
if ((signed int)(unsigned char)si >= 0) { // violation
|
|
}
|
|
if ((unsigned char)(signed char)si >= 0) { // violation
|
|
}
|
|
if ((signed char)(unsigned char)si >= 0) {
|
|
}
|
|
|
|
if ((signed int)(unsigned char)(signed int)si >= 0) { // violation
|
|
}
|
|
if ((signed char)(unsigned char)(signed int)si >= 0) {
|
|
}
|
|
if ((signed int)(unsigned char)(signed char)si >= 0) { // violation
|
|
}
|
|
|
|
if (ui <= 0) {
|
|
}
|
|
if (0 <= ui) { // violation
|
|
}
|
|
if (0 < ui) {
|
|
}
|
|
}
|