@@ -414,26 +414,41 @@ void
414414agent_initialize_allow_list () {
415415 /*
416416 * allowed paths for PKCS11 libraries,
417- * initialize to ProgramFiles and ProgramFiles(x86) by default
417+ * attempt to initialize to ProgramFiles and ProgramFiles(x86) by default
418418 * upstream uses /usr/lib/* and /usr/local/lib/*
419419 */
420- size_t prog_files_len = 0 , prog_files_x86_len = 0 ;
421- char * prog_files = NULL , * prog_files_x86 = NULL ;
420+ size_t allowed_len = 0 , prog_files_len = 0 , prog_files_x86_len = 0 ;
421+ char * allowed_path = NULL , * prog_files = NULL , * prog_files_x86 = NULL ;
422422
423423 _dupenv_s (& prog_files , & prog_files_len , "ProgramFiles" );
424- if (!prog_files )
425- fatal ("couldn't find ProgramFiles environment variable" );
426- convertToForwardslash (prog_files );
427-
428424 _dupenv_s (& prog_files_x86 , & prog_files_x86_len , "ProgramFiles(x86)" );
429- if (!prog_files_x86 )
430- fatal ("couldn't find ProgramFiles environment variable" );
431- convertToForwardslash (prog_files_x86 );
432425
433- size_t allowed_providers_len = 1 + prog_files_len + 4 + prog_files_x86_len + 3 ;
434- allowed_providers = xmalloc (allowed_providers_len );
435- sprintf_s (allowed_providers , allowed_providers_len , "/%s/*,/%s/*" , prog_files , prog_files_x86 );
426+ if (!prog_files && !prog_files_x86 ) {
427+ allowed_providers = xstrdup ("" );
428+ return ;
429+ }
430+
431+ if (prog_files && prog_files_x86 ) {
432+ allowed_len = prog_files_len + 3 + prog_files_x86_len + 1 ;
433+ allowed_path = xmalloc (allowed_len );
434+ sprintf_s (allowed_path , allowed_len , "%s\\*,%s" , prog_files , prog_files_x86 );
435+ free (prog_files );
436+ free (prog_files_x86 );
437+ }
438+ else if (prog_files ) {
439+ allowed_len = prog_files_len ;
440+ allowed_path = prog_files ;
441+ }
442+ else if (prog_files_x86 ) {
443+ allowed_len = prog_files_x86_len ;
444+ allowed_path = prog_files_x86 ;
445+ }
446+
447+ allowed_len += 3 ; /* for additional characters below */
448+ allowed_providers = xmalloc (allowed_len );
449+ sprintf_s (allowed_providers , allowed_len , "%s\\*" , allowed_path );
436450
437- free (prog_files );
438- free (prog_files_x86 );
451+ if (allowed_path ) {
452+ free (allowed_path );
453+ }
439454}
0 commit comments