[PATCH] rsaenh: do not use stack variables out of frame (Coverity)

Marcus Meissner marcus at jet.franken.de
Sat Jul 15 03:07:38 CDT 2017


1414721 Pointer to local outside scope

These harmless looking assignments are of the form:

	algid = BCRYPT_SHA512_ALGORITHM;

with ../../include/bcrypt.h:#define BCRYPT_SHA512_ALGORITHM     (const WCHAR []){'S','H','A','5','1','2',0}
this is
	algid = temporary allocated stack variable

The stack array however goes invalid as soon as it leaves the "switch" case.

Use a stack temporary array to avoid this confusion.

Signed-off-by: Marcus Meissner <marcus at jet.franken.de>
---
 dlls/rsaenh/implglue.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/dlls/rsaenh/implglue.c b/dlls/rsaenh/implglue.c
index 69c7f80694..a643529222 100644
--- a/dlls/rsaenh/implglue.c
+++ b/dlls/rsaenh/implglue.c
@@ -50,8 +50,9 @@ BOOL WINAPI SystemFunction036(PVOID pbBuffer, ULONG dwLen);
         
 BOOL init_hash_impl(ALG_ID aiAlgid, HASH_CONTEXT *pHashContext) 
 {
-    const WCHAR *algid = NULL;
+    WCHAR algid[20];
 
+    algid[0] = 0;
     switch (aiAlgid) 
     {
         case CALG_MD2:
@@ -71,19 +72,19 @@ BOOL init_hash_impl(ALG_ID aiAlgid, HASH_CONTEXT *pHashContext)
             break;
 
         case CALG_SHA_256:
-            algid = BCRYPT_SHA256_ALGORITHM;
+            lstrcpyW(algid,BCRYPT_SHA256_ALGORITHM);
             break;
 
         case CALG_SHA_384:
-            algid = BCRYPT_SHA384_ALGORITHM;
+            lstrcpyW(algid,BCRYPT_SHA384_ALGORITHM);
             break;
 
         case CALG_SHA_512:
-            algid = BCRYPT_SHA512_ALGORITHM;
+            lstrcpyW(algid,BCRYPT_SHA512_ALGORITHM);
             break;
     }
 
-    if (algid)
+    if (algid[0])
     {
         BCRYPT_ALG_HANDLE provider;
         NTSTATUS status;
-- 
2.13.2




More information about the wine-patches mailing list