Files
codeql/cpp/ql/test/query-tests/Likely Bugs/Arithmetic/UnsignedGEZero/UnsignedGEZero.cpp
2020-03-16 13:22:00 +00:00

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) {
}
}