From d4b3a4c0ac219fe81055d3ff78faa3e2efe96173 Mon Sep 17 00:00:00 2001 From: Justin Smith Date: Fri, 22 Mar 2024 10:37:14 -0400 Subject: [PATCH] Support tempfile creation in ssl_test --- crypto/test/test_util.cc | 31 +++++++++++++++++-------------- crypto/test/test_util.h | 10 ++++++++++ ssl/ssl_test.cc | 15 ++++----------- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/crypto/test/test_util.cc b/crypto/test/test_util.cc index b77d1b6b8a..bebeb2254d 100644 --- a/crypto/test/test_util.cc +++ b/crypto/test/test_util.cc @@ -88,28 +88,31 @@ bssl::UniquePtr CertFromPEM(const char *pem) { } #if defined(OPENSSL_WINDOWS) -#include -#ifndef PATH_MAX -#define PATH_MAX MAX_PATH -#endif -#include -FILE* createRawTempFILE() { +size_t createTempFILEpath(char buffer[PATH_MAX]) { + // On Windows, tmpfile() may attempt to create temp files in the root directory + // of the drive, which requires Admin privileges, resulting in test failure. char pathname[PATH_MAX]; if(0 == GetTempPathA(PATH_MAX, pathname)) { - return nullptr; + return 0; } + return GetTempFileNameA(pathname, "awslctest", 0, buffer); +} +#else +size_t createTempFILEpath(char buffer[PATH_MAX]) { + if(tmpnam(buffer) == nullptr) { + return 0; + } + return strnlen(buffer, PATH_MAX); +} +#endif + +FILE* createRawTempFILE() { char filename[PATH_MAX]; - if(0 == GetTempFileNameA(pathname, "awslctest", 0, filename)) { + if(createTempFILEpath(filename) == 0) { return nullptr; } return fopen(filename, "w+b"); } -#else -#include -FILE* createRawTempFILE() { - return tmpfile(); -} -#endif TempFILE createTempFILE() { return TempFILE(createRawTempFILE()); diff --git a/crypto/test/test_util.h b/crypto/test/test_util.h index bf906c490b..2fe6a4c988 100644 --- a/crypto/test/test_util.h +++ b/crypto/test/test_util.h @@ -82,6 +82,16 @@ struct FileCloser { using TempFILE = std::unique_ptr; +#if defined(OPENSSL_WINDOWS) +#include +#ifndef PATH_MAX +#define PATH_MAX MAX_PATH +#endif +#else +#include +#endif + +size_t createTempFILEpath(char buffer[PATH_MAX]); FILE* createRawTempFILE(); TempFILE createTempFILE(); diff --git a/ssl/ssl_test.cc b/ssl/ssl_test.cc index 94b428fe8b..d75f832735 100644 --- a/ssl/ssl_test.cc +++ b/ssl/ssl_test.cc @@ -12111,17 +12111,10 @@ TEST(SSLTest, SSLFileTests) { using ScopedFILE = std::unique_ptr; -#if defined(OPENSSL_WINDOWS) - char rsa_pem_filename[FILENAME_MAX]; - char ecdsa_pem_filename[FILENAME_MAX]; - ASSERT_EQ(tmpnam_s(rsa_pem_filename, FILENAME_MAX), 0); - ASSERT_EQ(tmpnam_s(ecdsa_pem_filename, FILENAME_MAX), 0); -#else - char rsa_pem_filename[] = "/tmp/fileXXXXXX"; - char ecdsa_pem_filename[] = "/tmp/fileXXXXXX"; - ASSERT_TRUE(mkstemp(rsa_pem_filename)); - ASSERT_TRUE(mkstemp(ecdsa_pem_filename)); -#endif + char rsa_pem_filename[PATH_MAX]; + char ecdsa_pem_filename[PATH_MAX]; + ASSERT_TRUE(createTempFILEpath(rsa_pem_filename)); + ASSERT_TRUE(createTempFILEpath(ecdsa_pem_filename)); ScopedFILE rsa_pem(fopen(rsa_pem_filename, "w")); ScopedFILE ecdsa_pem(fopen(ecdsa_pem_filename, "w"));