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