From bbc738c490bcd691151c28f971e0e153777fb255 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Mon, 14 Jul 2014 17:32:57 +0200 Subject: Static Code Analysis : Add various NULL pointers checks --- src/Common/Crypto.c | 22 ++++++++++++++-------- src/Common/Crypto.h | 4 ++-- src/Common/Password.c | 32 ++++++++++++++++++++++---------- src/Common/Password.h | 2 +- 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/Common/Crypto.c b/src/Common/Crypto.c index 3b87572a..dd30e488 100644 --- a/src/Common/Crypto.c +++ b/src/Common/Crypto.c @@ -321,24 +321,28 @@ Cipher *CipherGet (int id) return NULL; } -char *CipherGetName (int cipherId) +const char *CipherGetName (int cipherId) { - return CipherGet (cipherId) -> Name; + Cipher* pCipher = CipherGet (cipherId); + return pCipher? pCipher -> Name : ""; } int CipherGetBlockSize (int cipherId) { - return CipherGet (cipherId) -> BlockSize; + Cipher* pCipher = CipherGet (cipherId); + return pCipher? pCipher -> BlockSize : 0; } int CipherGetKeySize (int cipherId) { - return CipherGet (cipherId) -> KeySize; + Cipher* pCipher = CipherGet (cipherId); + return pCipher? pCipher -> KeySize : 0; } int CipherGetKeyScheduleSize (int cipherId) { - return CipherGet (cipherId) -> KeyScheduleSize; + Cipher* pCipher = CipherGet (cipherId); + return pCipher? pCipher -> KeyScheduleSize : 0; } #ifndef TC_WINDOWS_BOOT @@ -715,15 +719,17 @@ int HashGetIdByName (char *name) } -char *HashGetName (int hashId) +const char *HashGetName (int hashId) { - return HashGet (hashId) -> Name; + Hash* pHash = HashGet(hashId); + return pHash? pHash -> Name : ""; } BOOL HashIsDeprecated (int hashId) { - return HashGet (hashId) -> Deprecated; + Hash* pHash = HashGet(hashId); + return pHash? pHash -> Deprecated : FALSE; } diff --git a/src/Common/Crypto.h b/src/Common/Crypto.h index dd35eeca..4f47ec04 100644 --- a/src/Common/Crypto.h +++ b/src/Common/Crypto.h @@ -269,7 +269,7 @@ int CipherGetBlockSize (int cipher); int CipherGetKeySize (int cipher); int CipherGetKeyScheduleSize (int cipher); BOOL CipherSupportsIntraDataUnitParallelization (int cipher); -char * CipherGetName (int cipher); +const char * CipherGetName (int cipher); int CipherInit (int cipher, unsigned char *key, unsigned char *ks); int EAInit (int ea, unsigned char *key, unsigned char *ks); @@ -302,7 +302,7 @@ int EAGetPreviousCipher (int ea, int previousCipherId); int EAIsFormatEnabled (int ea); BOOL EAIsModeSupported (int ea, int testedMode); -char *HashGetName (int hash_algo_id); +const char *HashGetName (int hash_algo_id); BOOL HashIsDeprecated (int hashId); int GetMaxPkcs5OutSize (void); diff --git a/src/Common/Password.c b/src/Common/Password.c index 506a18c5..ca86f9c4 100644 --- a/src/Common/Password.c +++ b/src/Common/Password.c @@ -66,15 +66,20 @@ BOOL CheckPasswordCharEncoding (HWND hPassword, Password *ptrPw) if (hPassword == NULL) { - unsigned char *pw; - len = ptrPw->Length; - pw = (unsigned char *) ptrPw->Text; - - for (i = 0; i < len; i++) + if (ptrPw) { - if (pw[i] >= 0x7f || pw[i] < 0x20) // A non-ASCII or non-printable character? - return FALSE; + unsigned char *pw; + len = ptrPw->Length; + pw = (unsigned char *) ptrPw->Text; + + for (i = 0; i < len; i++) + { + if (pw[i] >= 0x7f || pw[i] < 0x20) // A non-ASCII or non-printable character? + return FALSE; + } } + else + return FALSE; } else { @@ -114,7 +119,7 @@ BOOL CheckPasswordLength (HWND hwndDlg, HWND hwndItem) return TRUE; } -int ChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg) +int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg) { int nDosLinkCreated = 1, nStatus = ERR_OS_ERROR; char szDiskFile[TC_MAX_PATH], szCFDevice[TC_MAX_PATH]; @@ -138,9 +143,16 @@ int ChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, i if (oldPassword->Length == 0 || newPassword->Length == 0) return -1; + if (!lpszVolume) + { + nStatus = ERR_OUTOFMEMORY; + handleError (hwndDlg, nStatus); + return nStatus; + } + WaitCursor (); - CreateFullVolumePath (szDiskFile, lpszVolume, &bDevice); + CreateFullVolumePath (szDiskFile, sizeof(szDiskFile), lpszVolume, &bDevice); if (bDevice == FALSE) { @@ -148,7 +160,7 @@ int ChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, i } else { - nDosLinkCreated = FakeDosNameForDevice (szDiskFile, szDosDevice, szCFDevice, FALSE); + nDosLinkCreated = FakeDosNameForDevice (szDiskFile, szDosDevice, sizeof(szDosDevice), szCFDevice, sizeof(szCFDevice),FALSE); if (nDosLinkCreated != 0) goto error; diff --git a/src/Common/Password.h b/src/Common/Password.h index 25028b11..d4f1f928 100644 --- a/src/Common/Password.h +++ b/src/Common/Password.h @@ -35,7 +35,7 @@ typedef struct void VerifyPasswordAndUpdate ( HWND hwndDlg , HWND hButton , HWND hPassword , HWND hVerify , unsigned char *szPassword , char *szVerify, BOOL keyFilesEnabled ); BOOL CheckPasswordLength (HWND hwndDlg, HWND hwndItem); BOOL CheckPasswordCharEncoding (HWND hPassword, Password *ptrPw); -int ChangePwd (char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg); +int ChangePwd (const char *lpszVolume, Password *oldPassword, Password *newPassword, int pkcs5, HWND hwndDlg); #endif // defined(_WIN32) && !defined(TC_WINDOWS_DRIVER) -- cgit v1.2.3