@@ -46,8 +46,7 @@ TEST(platform_file_apis_survive_max_path_overflow) {
4646 ASSERT_NOT_NULL (cbm_mkdtemp (base ));
4747
4848 enum { LONG_SEGMENTS = 5 };
49- static const char segment [] =
50- "segment-abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnop" ;
49+ static const char segment [] = "segment-abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnop" ;
5150 char deep [CBM_SZ_1K ];
5251 written = snprintf (deep , sizeof (deep ), "%s" , base );
5352 ASSERT_TRUE (written > 0 && written < (int )sizeof (deep ));
@@ -475,6 +474,28 @@ TEST(platform_mkstemp_and_mkdtemp_survive_non_ascii_directory) {
475474 PASS ();
476475}
477476
477+ #ifdef _WIN32
478+ TEST (platform_mkstemp_retained_files_exceed_crt_namespace ) {
479+ char base [CBM_SZ_256 ] = "/tmp/cbm-many-temp-XXXXXX" ;
480+ ASSERT_NOT_NULL (cbm_mkdtemp (base ));
481+ char paths [64 ][CBM_SZ_512 ] = {{0 }};
482+ int created = 0 ;
483+ for (; created < 64 ; created ++ ) {
484+ int written =
485+ snprintf (paths [created ], sizeof (paths [created ]), "%s/.worker-log-XXXXXX" , base );
486+ ASSERT_TRUE (written > 0 && written < (int )sizeof (paths [created ]));
487+ int descriptor = cbm_mkstemp (paths [created ]);
488+ ASSERT_TRUE (descriptor >= 0 );
489+ ASSERT_EQ (_close (descriptor ), 0 );
490+ }
491+ for (int index = 0 ; index < created ; index ++ ) {
492+ ASSERT_EQ (cbm_unlink (paths [index ]), 0 );
493+ }
494+ ASSERT_EQ (cbm_rmdir (base ), 0 );
495+ PASS ();
496+ }
497+ #endif
498+
478499typedef struct {
479500 atomic_int * ready ;
480501 atomic_bool * go ;
@@ -832,8 +853,17 @@ TEST(platform_env_long_refuses_what_it_cannot_read) {
832853
833854 /* Every one of these used to answer 0 through atol. */
834855 const char * unreadable [] = {
835- "abc" , "30s" , " 30" , "30 " , "" , "1e3" ,
836- "0x10" , "+ 30" , "--3" , "3.5" , "99999999999999999999999999" ,
856+ "abc" ,
857+ "30s" ,
858+ " 30" ,
859+ "30 " ,
860+ "" ,
861+ "1e3" ,
862+ "0x10" ,
863+ "+ 30" ,
864+ "--3" ,
865+ "3.5" ,
866+ "99999999999999999999999999" ,
837867 };
838868 for (size_t i = 0 ; i < sizeof (unreadable ) / sizeof (unreadable [0 ]); i ++ ) {
839869 ASSERT_EQ (cbm_setenv (name , unreadable [i ], 1 ), 0 );
@@ -1135,6 +1165,9 @@ SUITE(platform) {
11351165 RUN_TEST (platform_mkdir_p_follow_owned_is_per_call_site );
11361166 RUN_TEST (platform_mkdir_p_resolves_link_text_from_the_link_directory );
11371167 RUN_TEST (platform_mkstemp_and_mkdtemp_survive_non_ascii_directory );
1168+ #ifdef _WIN32
1169+ RUN_TEST (platform_mkstemp_retained_files_exceed_crt_namespace );
1170+ #endif
11381171 RUN_TEST (platform_mkdtemp_is_thread_safe );
11391172 RUN_TEST (platform_counter_scaling_avoids_intermediate_overflow );
11401173 RUN_TEST (platform_counter_scaling_preserves_monotonic_deadlines );
0 commit comments