// 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;
}