34 lines
868 B
C++
34 lines
868 B
C++
// Test that the common part implementation of *printf interceptors does not
|
|
// cause negative-size-param false positives.
|
|
|
|
// RUN: %clangxx -O2 %s -o %t
|
|
// RUN: %env_tool_opts=check_printf=1 %run %t 2>&1
|
|
|
|
// FIXME: The maximum supported allocation size is too platform-specific:
|
|
// REQUIRES: x86_64-target-arch
|
|
|
|
// FIXME: printf is not intercepted on Windows yet.
|
|
// UNSUPPORTED: target={{.*windows-msvc.*}}
|
|
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
void write(char *buf, int buf_size, const char *fmt, ...) {
|
|
va_list args;
|
|
va_start(args, fmt);
|
|
vsnprintf(buf, buf_size, fmt, args);
|
|
va_end(args);
|
|
}
|
|
|
|
int main() {
|
|
char buffer[100];
|
|
const size_t kStrSize = 1UL << 31;
|
|
char *x = (char *)malloc(kStrSize);
|
|
memset(x, '=', kStrSize - 1);
|
|
x[kStrSize - 1] = 0;
|
|
write(buffer, 100, "%s\n", x);
|
|
free(x);
|
|
return 0;
|
|
}
|