@@ -400,41 +400,51 @@ static int SetupCTX(WOLFSSHD_CONFIG* conf, WOLFSSH_CTX** ctx,
400400 /* Use cert store host key */
401401 wchar_t * wStoreName = NULL ;
402402 wchar_t * wSubjectName = NULL ;
403- DWORD dwFlags = CERT_SYSTEM_STORE_CURRENT_USER ;
403+ word32 dwFlags = CERT_SYSTEM_STORE_CURRENT_USER ;
404404 int storeNameLen , subjectNameLen ;
405-
405+
406406 /* Parse flags if provided */
407407 if (hostKeyStoreFlags != NULL ) {
408408 if (WSTRCMP (hostKeyStoreFlags , "CURRENT_USER" ) == 0 ) {
409409 dwFlags = CERT_SYSTEM_STORE_CURRENT_USER ;
410410 } else if (WSTRCMP (hostKeyStoreFlags , "LOCAL_MACHINE" ) == 0 ) {
411411 dwFlags = CERT_SYSTEM_STORE_LOCAL_MACHINE ;
412412 } else {
413- dwFlags = (DWORD )atoi (hostKeyStoreFlags );
413+ dwFlags = (word32 )atoi (hostKeyStoreFlags );
414414 }
415415 }
416-
416+
417417 /* Convert to wide strings */
418418 storeNameLen = MultiByteToWideChar (CP_UTF8 , 0 , hostKeyStore , -1 , NULL , 0 );
419419 subjectNameLen = MultiByteToWideChar (CP_UTF8 , 0 , hostKeyStoreSubject , -1 , NULL , 0 );
420-
421- wStoreName = (wchar_t * )WMALLOC (storeNameLen * sizeof (wchar_t ), heap , DYNTYPE_SSHD );
422- wSubjectName = (wchar_t * )WMALLOC (subjectNameLen * sizeof (wchar_t ), heap , DYNTYPE_SSHD );
423-
424- if (wStoreName == NULL || wSubjectName == NULL ) {
425- wolfSSH_Log (WS_LOG_ERROR , "[SSHD] Memory allocation failed for cert store strings" );
426- ret = WS_MEMORY_E ;
420+
421+ if (storeNameLen == 0 || subjectNameLen == 0 ) {
422+ wolfSSH_Log (WS_LOG_ERROR ,
423+ "[SSHD] Failed to convert cert store strings to wide characters" );
424+ ret = WS_BAD_ARGUMENT ;
427425 } else {
428- MultiByteToWideChar (CP_UTF8 , 0 , hostKeyStore , -1 , wStoreName , storeNameLen );
429- MultiByteToWideChar (CP_UTF8 , 0 , hostKeyStoreSubject , -1 , wSubjectName , subjectNameLen );
430-
431- ret = wolfSSH_CTX_UsePrivateKey_fromStore (* ctx , wStoreName , dwFlags , wSubjectName );
432- if (ret != WS_SUCCESS ) {
433- wolfSSH_Log (WS_LOG_ERROR , "[SSHD] Failed to load host key from certificate store" );
426+ wStoreName = (wchar_t * )WMALLOC (storeNameLen * sizeof (wchar_t ), heap , DYNTYPE_SSHD );
427+ wSubjectName = (wchar_t * )WMALLOC (subjectNameLen * sizeof (wchar_t ), heap , DYNTYPE_SSHD );
428+
429+ if (wStoreName == NULL || wSubjectName == NULL ) {
430+ wolfSSH_Log (WS_LOG_ERROR , "[SSHD] Memory allocation failed for cert store strings" );
431+ ret = WS_MEMORY_E ;
432+ } else {
433+ MultiByteToWideChar (CP_UTF8 , 0 , hostKeyStore , -1 , wStoreName , storeNameLen );
434+ MultiByteToWideChar (CP_UTF8 , 0 , hostKeyStoreSubject , -1 , wSubjectName , subjectNameLen );
435+
436+ ret = wolfSSH_CTX_UsePrivateKey_fromStore (* ctx , wStoreName , dwFlags , wSubjectName );
437+ if (ret != WS_SUCCESS ) {
438+ wolfSSH_Log (WS_LOG_ERROR , "[SSHD] Failed to load host key from certificate store" );
439+ }
440+ }
441+
442+ if (wStoreName != NULL ) {
443+ WFREE (wStoreName , heap , DYNTYPE_SSHD );
444+ }
445+ if (wSubjectName != NULL ) {
446+ WFREE (wSubjectName , heap , DYNTYPE_SSHD );
434447 }
435-
436- WFREE (wStoreName , heap , DYNTYPE_SSHD );
437- WFREE (wSubjectName , heap , DYNTYPE_SSHD );
438448 }
439449 } else
440450#elif defined(WOLFSSH_CERTS )
0 commit comments