cppcheck/test/cfg/posix.c

128 lines
3.0 KiB
C
Raw Normal View History

2015-01-30 07:52:32 +01:00
// Test library configuration for posix.cfg
//
// Usage:
// $ cppcheck --check-library --library=posix --enable=information --error-exitcode=1 --inline-suppr --suppress=missingIncludeSystem test/cfg/posix.c
2015-01-30 07:52:32 +01:00
// =>
// No warnings about bad library configuration, unmatched suppressions, etc. exitcode=0
//
2015-02-15 18:11:09 +01:00
#include <stdio.h> // <- FILE
#include <dirent.h>
#include <sys/mman.h>
#include <sys/socket.h>
#include <fcntl.h>
2015-01-30 07:52:32 +01:00
#include <unistd.h>
2015-02-15 18:11:09 +01:00
void bufferAccessOutOfBounds(int fd) {
2015-02-10 17:29:36 +01:00
char a[5];
read(fd,a,5);
// cppcheck-suppress bufferAccessOutOfBounds
read(fd,a,6);
write(fd,a,5);
// cppcheck-suppress bufferAccessOutOfBounds
write(fd,a,6);
recv(fd,a,5,0);
// cppcheck-suppress bufferAccessOutOfBounds
recv(fd,a,6,0);
recvfrom(fd,a,5,0,0x0,0x0);
// cppcheck-suppress bufferAccessOutOfBounds
recvfrom(fd,a,6,0,0x0,0x0);
send(fd,a,5,0);
// cppcheck-suppress bufferAccessOutOfBounds
send(fd,a,6,0);
sendto(fd,a,5,0,0x0,0x0);
// cppcheck-suppress bufferAccessOutOfBounds
sendto(fd,a,6,0,0x0,0x0);
// cppcheck-suppress constStatement
2015-02-10 17:29:36 +01:00
0;
}
2015-02-15 18:11:09 +01:00
void nullPointer(char *p) {
2015-01-30 07:52:32 +01:00
isatty (0);
mkdir (p, 0);
getcwd (0, 0);
// cppcheck-suppress nullPointer
readdir (0);
}
void memleak_mmap(int fd) {
// cppcheck-suppress unreadVariable
2015-02-15 18:11:09 +01:00
void *addr = mmap(NULL, 255, PROT_NONE, MAP_PRIVATE, fd, 0);
// cppcheck-suppress memleak
}
/* TODO: add configuration for fdopen
void resourceLeak_fdopen(int fd) {
FILE *f = fdopen(fd, "r");
// cppcheck-suppress resourceLeak
}
*/
void resourceLeak_fdopendir(int fd) {
// cppcheck-suppress unreadVariable
2015-02-15 18:11:09 +01:00
DIR* leak1 = fdopendir(fd);
// cppcheck-suppress resourceLeak
}
void resourceLeak_opendir(void) {
// cppcheck-suppress unreadVariable
2015-02-15 18:11:09 +01:00
DIR* leak1 = opendir("abc");
// cppcheck-suppress resourceLeak
}
void resourceLeak_socket(void) {
// cppcheck-suppress unreadVariable
2015-02-15 18:11:09 +01:00
int s = socket(AF_INET, SOCK_STREAM, 0);
// cppcheck-suppress resourceLeak
}
void noleak(int x, int y, int z) {
DIR *p1 = fdopendir(x); closedir(p1);
DIR *p2 = opendir("abc"); closedir(p2);
int s = socket(AF_INET,SOCK_STREAM,0); close(s);
/* TODO: add configuration for open/fdopen
// #2830
int fd = open("path", O_RDONLY);
FILE *f = fdopen(fd, "rt");
fclose(f);
*/
}
2015-02-16 16:25:27 +01:00
// unused return value
void ignoredReturnValue(void *addr, int fd) {
// cppcheck-suppress ignoredReturnValue
2015-02-16 16:25:27 +01:00
// cppcheck-suppress leakReturnValNotUsed
mmap(addr, 255, PROT_NONE, MAP_PRIVATE, fd, 0);
// cppcheck-suppress ignoredReturnValue
setuid(42);
// cppcheck-suppress ignoredReturnValue
getuid();
2015-02-16 16:25:27 +01:00
}
// valid range
void invalidFunctionArg() {
// cppcheck-suppress invalidFunctionArg
usleep(-1);
usleep(0);
usleep(999999);
// cppcheck-suppress invalidFunctionArg
usleep(1000000);
}
void uninitvar(int fd) {
int x;
char buf[2];
// cppcheck-suppress uninitvar
write(x,"ab",2);
// cppcheck-suppress uninitvar
write(fd,buf,2);
// cppcheck-suppress uninitvar
write(fd,"ab",x);
}