diff --git a/winpr/include/winpr/bcrypt.h b/winpr/include/winpr/bcrypt.h index 1863b56d8..06ed40952 100644 --- a/winpr/include/winpr/bcrypt.h +++ b/winpr/include/winpr/bcrypt.h @@ -33,66 +33,66 @@ typedef PVOID BCRYPT_KEY_HANDLE; typedef PVOID BCRYPT_HASH_HANDLE; typedef PVOID BCRYPT_SECRET_HANDLE; -#define BCRYPT_RSA_ALGORITHM u"RSA" -#define BCRYPT_RSA_SIGN_ALGORITHM u"RSA_SIGN" -#define BCRYPT_DH_ALGORITHM u"DH" -#define BCRYPT_DSA_ALGORITHM u"DSA" -#define BCRYPT_RC2_ALGORITHM u"RC2" -#define BCRYPT_RC4_ALGORITHM u"RC4" -#define BCRYPT_AES_ALGORITHM u"AES" -#define BCRYPT_DES_ALGORITHM u"DES" -#define BCRYPT_DESX_ALGORITHM u"DESX" -#define BCRYPT_3DES_ALGORITHM u"3DES" -#define BCRYPT_3DES_112_ALGORITHM u"3DES_112" -#define BCRYPT_MD2_ALGORITHM u"MD2" -#define BCRYPT_MD4_ALGORITHM u"MD4" -#define BCRYPT_MD5_ALGORITHM u"MD5" -#define BCRYPT_SHA1_ALGORITHM u"SHA1" -#define BCRYPT_SHA256_ALGORITHM u"SHA256" -#define BCRYPT_SHA384_ALGORITHM u"SHA384" -#define BCRYPT_SHA512_ALGORITHM u"SHA512" -#define BCRYPT_AES_GMAC_ALGORITHM u"AES-GMAC" -#define BCRYPT_AES_CMAC_ALGORITHM u"AES-CMAC" -#define BCRYPT_ECDSA_P256_ALGORITHM u"ECDSA_P256" -#define BCRYPT_ECDSA_P384_ALGORITHM u"ECDSA_P384" -#define BCRYPT_ECDSA_P521_ALGORITHM u"ECDSA_P521" -#define BCRYPT_ECDH_P256_ALGORITHM u"ECDSA_P256" -#define BCRYPT_ECDH_P384_ALGORITHM u"ECDSA_P384" -#define BCRYPT_ECDH_P521_ALGORITHM u"ECDSA_P521" -#define BCRYPT_RNG_ALGORITHM u"RNG" -#define BCRYPT_RNG_FIPS186_DSA_ALGORITHM u"FIPS186DSARNG" -#define BCRYPT_RNG_DUAL_EC_ALGORITHM u"DUALECRNG" +static const WCHAR BCRYPT_RSA_ALGORITHM[] = u"RSA"; +static const WCHAR BCRYPT_RSA_SIGN_ALGORITHM[] = u"RSA_SIGN"; +static const WCHAR BCRYPT_DH_ALGORITHM[] = u"DH"; +static const WCHAR BCRYPT_DSA_ALGORITHM[] = u"DSA"; +static const WCHAR BCRYPT_RC2_ALGORITHM[] = u"RC2"; +static const WCHAR BCRYPT_RC4_ALGORITHM[] = u"RC4"; +static const WCHAR BCRYPT_AES_ALGORITHM[] = u"AES"; +static const WCHAR BCRYPT_DES_ALGORITHM[] = u"DES"; +static const WCHAR BCRYPT_DESX_ALGORITHM[] = u"DESX"; +static const WCHAR BCRYPT_3DES_ALGORITHM[] = u"3DES"; +static const WCHAR BCRYPT_3DES_112_ALGORITHM[] = u"3DES_112"; +static const WCHAR BCRYPT_MD2_ALGORITHM[] = u"MD2"; +static const WCHAR BCRYPT_MD4_ALGORITHM[] = u"MD4"; +static const WCHAR BCRYPT_MD5_ALGORITHM[] = u"MD5"; +static const WCHAR BCRYPT_SHA1_ALGORITHM[] = u"SHA1"; +static const WCHAR BCRYPT_SHA256_ALGORITHM[] = u"SHA256"; +static const WCHAR BCRYPT_SHA384_ALGORITHM[] = u"SHA384"; +static const WCHAR BCRYPT_SHA512_ALGORITHM[] = u"SHA512"; +static const WCHAR BCRYPT_AES_GMAC_ALGORITHM[] = u"AES-GMAC"; +static const WCHAR BCRYPT_AES_CMAC_ALGORITHM[] = u"AES-CMAC"; +static const WCHAR BCRYPT_ECDSA_P256_ALGORITHM[] = u"ECDSA_P256"; +static const WCHAR BCRYPT_ECDSA_P384_ALGORITHM[] = u"ECDSA_P384"; +static const WCHAR BCRYPT_ECDSA_P521_ALGORITHM[] = u"ECDSA_P521"; +static const WCHAR BCRYPT_ECDH_P256_ALGORITHM[] = u"ECDSA_P256"; +static const WCHAR BCRYPT_ECDH_P384_ALGORITHM[] = u"ECDSA_P384"; +static const WCHAR BCRYPT_ECDH_P521_ALGORITHM[] = u"ECDSA_P521"; +static const WCHAR BCRYPT_RNG_ALGORITHM[] = u"RNG"; +static const WCHAR BCRYPT_RNG_FIPS186_DSA_ALGORITHM[] = u"FIPS186DSARNG"; +static const WCHAR BCRYPT_RNG_DUAL_EC_ALGORITHM[] = u"DUALECRNG"; -#define BCRYPT_ECDSA_ALGORITHM u"ECDSA" -#define BCRYPT_ECDH_ALGORITHM u"ECDH" -#define BCRYPT_XTS_AES_ALGORITHM u"XTS-AES" +static const WCHAR BCRYPT_ECDSA_ALGORITHM[] = u"ECDSA"; +static const WCHAR BCRYPT_ECDH_ALGORITHM[] = u"ECDH"; +static const WCHAR BCRYPT_XTS_AES_ALGORITHM[] = u"XTS-AES"; -#define MS_PRIMITIVE_PROVIDER u"Microsoft Primitive Provider" -#define MS_PLATFORM_CRYPTO_PROVIDER u"Microsoft Platform Crypto Provider" +static const WCHAR MS_PRIMITIVE_PROVIDER[] = u"Microsoft Primitive Provider"; +static const WCHAR MS_PLATFORM_CRYPTO_PROVIDER[] = u"Microsoft Platform Crypto Provider"; #define BCRYPT_ALG_HANDLE_HMAC_FLAG 0x00000008 #define BCRYPT_PROV_DISPATCH 0x00000001 -#define BCRYPT_OBJECT_LENGTH u"ObjectLength" -#define BCRYPT_ALGORITHM_NAME u"AlgorithmName" -#define BCRYPT_PROVIDER_HANDLE u"ProviderHandle" -#define BCRYPT_CHAINING_MODE u"ChainingMode" -#define BCRYPT_BLOCK_LENGTH u"BlockLength" -#define BCRYPT_KEY_LENGTH u"KeyLength" -#define BCRYPT_KEY_OBJECT_LENGTH u"KeyObjectLength" -#define BCRYPT_KEY_STRENGTH u"KeyStrength" -#define BCRYPT_KEY_LENGTHS u"KeyLengths" -#define BCRYPT_BLOCK_SIZE_LIST u"BlockSizeList" -#define BCRYPT_EFFECTIVE_KEY_LENGTH u"EffectiveKeyLength" -#define BCRYPT_HASH_LENGTH u"HashDigestLength" -#define BCRYPT_HASH_OID_LIST u"HashOIDList" -#define BCRYPT_PADDING_SCHEMES u"PaddingSchemes" -#define BCRYPT_SIGNATURE_LENGTH u"SignatureLength" -#define BCRYPT_HASH_BLOCK_LENGTH u"HashBlockLength" -#define BCRYPT_AUTH_TAG_LENGTH u"AuthTagLength" -#define BCRYPT_PRIMITIVE_TYPE u"PrimitiveType" -#define BCRYPT_IS_KEYED_HASH u"IsKeyedHash" -#define BCRYPT_KEY_DATA_BLOB u"KeyDataBlob" +static const WCHAR BCRYPT_OBJECT_LENGTH[] = u"ObjectLength"; +static const WCHAR BCRYPT_ALGORITHM_NAME[] = u"AlgorithmName"; +static const WCHAR BCRYPT_PROVIDER_HANDLE[] = u"ProviderHandle"; +static const WCHAR BCRYPT_CHAINING_MODE[] = u"ChainingMode"; +static const WCHAR BCRYPT_BLOCK_LENGTH[] = u"BlockLength"; +static const WCHAR BCRYPT_KEY_LENGTH[] = u"KeyLength"; +static const WCHAR BCRYPT_KEY_OBJECT_LENGTH[] = u"KeyObjectLength"; +static const WCHAR BCRYPT_KEY_STRENGTH[] = u"KeyStrength"; +static const WCHAR BCRYPT_KEY_LENGTHS[] = u"KeyLengths"; +static const WCHAR BCRYPT_BLOCK_SIZE_LIST[] = u"BlockSizeList"; +static const WCHAR BCRYPT_EFFECTIVE_KEY_LENGTH[] = u"EffectiveKeyLength"; +static const WCHAR BCRYPT_HASH_LENGTH[] = u"HashDigestLength"; +static const WCHAR BCRYPT_HASH_OID_LIST[] = u"HashOIDList"; +static const WCHAR BCRYPT_PADDING_SCHEMES[] = u"PaddingSchemes"; +static const WCHAR BCRYPT_SIGNATURE_LENGTH[] = u"SignatureLength"; +static const WCHAR BCRYPT_HASH_BLOCK_LENGTH[] = u"HashBlockLength"; +static const WCHAR BCRYPT_AUTH_TAG_LENGTH[] = u"AuthTagLength"; +static const WCHAR BCRYPT_PRIMITIVE_TYPE[] = u"PrimitiveType"; +static const WCHAR BCRYPT_IS_KEYED_HASH[] = u"IsKeyedHash"; +static const WCHAR BCRYPT_KEY_DATA_BLOB[] = u"KeyDataBlob"; #define BCRYPT_BLOCK_PADDING 0x00000001 diff --git a/winpr/include/winpr/error.h b/winpr/include/winpr/error.h index b883a6e2d..ad50f5a7f 100644 --- a/winpr/include/winpr/error.h +++ b/winpr/include/winpr/error.h @@ -2998,46 +2998,46 @@ WINPR_PRAGMA_DIAG_POP #define WS_E_SECURITY_SYSTEM_FAILURE 0x803D0023 #endif -#define NTE_BAD_UID INT32_C(0x80090001) -#define NTE_BAD_HASH INT32_C(0x80090002) -#define NTE_BAD_KEY INT32_C(0x80090003) -#define NTE_BAD_LEN INT32_C(0x80090004) -#define NTE_BAD_DATA INT32_C(0x80090005) -#define NTE_BAD_SIGNATURE INT32_C(0x80090006) -#define NTE_BAD_VER INT32_C(0x80090007) -#define NTE_BAD_ALGID INT32_C(0x80090008) -#define NTE_BAD_FLAGS INT32_C(0x80090009) -#define NTE_BAD_TYPE INT32_C(0x8009000A) -#define NTE_BAD_KEY_STATE INT32_C(0x8009000B) -#define NTE_BAD_HASH_STATE INT32_C(0x8009000C) -#define NTE_NO_KEY INT32_C(0x8009000D) -#define NTE_NO_MEMORY INT32_C(0x8009000E) -#define NTE_EXISTS INT32_C(0x8009000F) -#define NTE_PERM INT32_C(0x80090010) -#define NTE_NOT_FOUND INT32_C(0x80090011) -#define NTE_DOUBLE_ENCRYPT INT32_C(0x80090012) -#define NTE_BAD_PROVIDER INT32_C(0x80090013) -#define NTE_BAD_PROV_TYPE INT32_C(0x80090014) -#define NTE_BAD_PUBLIC_KEY INT32_C(0x80090015) -#define NTE_BAD_KEYSET INT32_C(0x80090016) -#define NTE_PROV_TYPE_NOT_DEF INT32_C(0x80090017) -#define NTE_PROV_TYPE_ENTRY_BAD INT32_C(0x80090018) -#define NTE_KEYSET_NOT_DEF INT32_C(0x80090019) -#define NTE_KEYSET_ENTRY_BAD INT32_C(0x8009001A) -#define NTE_PROV_TYPE_NO_MATCH INT32_C(0x8009001B) -#define NTE_SIGNATURE_FILE_BAD INT32_C(0x8009001C) -#define NTE_PROVIDER_DLL_FAIL INT32_C(0x8009001D) -#define NTE_PROV_DLL_NOT_FOUND INT32_C(0x8009001E) -#define NTE_BAD_KEYSET_PARAM INT32_C(0x8009001F) -#define NTE_FAIL INT32_C(0x80090020) -#define NTE_SYS_ERR INT32_C(0x80090021) -#define NTE_SILENT_CONTEXT INT32_C(0x80090022) -#define NTE_TOKEN_KEYSET_STORAGE_FULL INT32_C(0x80090023) -#define NTE_TEMPORARY_PROFILE INT32_C(0x80090024) -#define NTE_FIXEDPARAMETER INT32_C(0x80090025) +#define NTE_BAD_UID WINPR_CXX_COMPAT_CAST(LONG, 0x80090001) +#define NTE_BAD_HASH WINPR_CXX_COMPAT_CAST(LONG, 0x80090002) +#define NTE_BAD_KEY WINPR_CXX_COMPAT_CAST(LONG, 0x80090003) +#define NTE_BAD_LEN WINPR_CXX_COMPAT_CAST(LONG, 0x80090004) +#define NTE_BAD_DATA WINPR_CXX_COMPAT_CAST(LONG, 0x80090005) +#define NTE_BAD_SIGNATURE WINPR_CXX_COMPAT_CAST(LONG, 0x80090006) +#define NTE_BAD_VER WINPR_CXX_COMPAT_CAST(LONG, 0x80090007) +#define NTE_BAD_ALGID WINPR_CXX_COMPAT_CAST(LONG, 0x80090008) +#define NTE_BAD_FLAGS WINPR_CXX_COMPAT_CAST(LONG, 0x80090009) +#define NTE_BAD_TYPE WINPR_CXX_COMPAT_CAST(LONG, 0x8009000A) +#define NTE_BAD_KEY_STATE WINPR_CXX_COMPAT_CAST(LONG, 0x8009000B) +#define NTE_BAD_HASH_STATE WINPR_CXX_COMPAT_CAST(LONG, 0x8009000C) +#define NTE_NO_KEY WINPR_CXX_COMPAT_CAST(LONG, 0x8009000D) +#define NTE_NO_MEMORY WINPR_CXX_COMPAT_CAST(LONG, 0x8009000E) +#define NTE_EXISTS WINPR_CXX_COMPAT_CAST(LONG, 0x8009000F) +#define NTE_PERM WINPR_CXX_COMPAT_CAST(LONG, 0x80090010) +#define NTE_NOT_FOUND WINPR_CXX_COMPAT_CAST(LONG, 0x80090011) +#define NTE_DOUBLE_ENCRYPT WINPR_CXX_COMPAT_CAST(LONG, 0x80090012) +#define NTE_BAD_PROVIDER WINPR_CXX_COMPAT_CAST(LONG, 0x80090013) +#define NTE_BAD_PROV_TYPE WINPR_CXX_COMPAT_CAST(LONG, 0x80090014) +#define NTE_BAD_PUBLIC_KEY WINPR_CXX_COMPAT_CAST(LONG, 0x80090015) +#define NTE_BAD_KEYSET WINPR_CXX_COMPAT_CAST(LONG, 0x80090016) +#define NTE_PROV_TYPE_NOT_DEF WINPR_CXX_COMPAT_CAST(LONG, 0x80090017) +#define NTE_PROV_TYPE_ENTRY_BAD WINPR_CXX_COMPAT_CAST(LONG, 0x80090018) +#define NTE_KEYSET_NOT_DEF WINPR_CXX_COMPAT_CAST(LONG, 0x80090019) +#define NTE_KEYSET_ENTRY_BAD WINPR_CXX_COMPAT_CAST(LONG, 0x8009001A) +#define NTE_PROV_TYPE_NO_MATCH WINPR_CXX_COMPAT_CAST(LONG, 0x8009001B) +#define NTE_SIGNATURE_FILE_BAD WINPR_CXX_COMPAT_CAST(LONG, 0x8009001C) +#define NTE_PROVIDER_DLL_FAIL WINPR_CXX_COMPAT_CAST(LONG, 0x8009001D) +#define NTE_PROV_DLL_NOT_FOUND WINPR_CXX_COMPAT_CAST(LONG, 0x8009001E) +#define NTE_BAD_KEYSET_PARAM WINPR_CXX_COMPAT_CAST(LONG, 0x8009001F) +#define NTE_FAIL WINPR_CXX_COMPAT_CAST(LONG, 0x80090020) +#define NTE_SYS_ERR WINPR_CXX_COMPAT_CAST(LONG, 0x80090021) +#define NTE_SILENT_CONTEXT WINPR_CXX_COMPAT_CAST(LONG, 0x80090022) +#define NTE_TOKEN_KEYSET_STORAGE_FULL WINPR_CXX_COMPAT_CAST(LONG, 0x80090023) +#define NTE_TEMPORARY_PROFILE WINPR_CXX_COMPAT_CAST(LONG, 0x80090024) +#define NTE_FIXEDPARAMETER WINPR_CXX_COMPAT_CAST(LONG, 0x80090025) #define NTE_NO_MORE_ITEMS ERROR_NO_MORE_ITEMS #define NTE_NOT_SUPPORTED ERROR_NOT_SUPPORTED -#define NTE_INVALID_PARAMETER INT32_C(0x80090027) +#define NTE_INVALID_PARAMETER WINPR_CXX_COMPAT_CAST(LONG, 0x80090027) #define EXCEPTION_MAXIMUM_PARAMETERS 15 diff --git a/winpr/include/winpr/sspi.h b/winpr/include/winpr/sspi.h index dcf9fe137..6150472ed 100644 --- a/winpr/include/winpr/sspi.h +++ b/winpr/include/winpr/sspi.h @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -128,125 +129,125 @@ typedef SecPkgInfoW* PSecPkgInfoW; #ifndef _WINERROR_ -#define SEC_E_OK (SECURITY_STATUS)0x00000000L -#define SEC_E_INSUFFICIENT_MEMORY (SECURITY_STATUS)0x80090300L -#define SEC_E_INVALID_HANDLE (SECURITY_STATUS)0x80090301L -#define SEC_E_UNSUPPORTED_FUNCTION (SECURITY_STATUS)0x80090302L -#define SEC_E_TARGET_UNKNOWN (SECURITY_STATUS)0x80090303L -#define SEC_E_INTERNAL_ERROR (SECURITY_STATUS)0x80090304L -#define SEC_E_SECPKG_NOT_FOUND (SECURITY_STATUS)0x80090305L -#define SEC_E_NOT_OWNER (SECURITY_STATUS)0x80090306L -#define SEC_E_CANNOT_INSTALL (SECURITY_STATUS)0x80090307L -#define SEC_E_INVALID_TOKEN (SECURITY_STATUS)0x80090308L -#define SEC_E_CANNOT_PACK (SECURITY_STATUS)0x80090309L -#define SEC_E_QOP_NOT_SUPPORTED (SECURITY_STATUS)0x8009030AL -#define SEC_E_NO_IMPERSONATION (SECURITY_STATUS)0x8009030BL -#define SEC_E_LOGON_DENIED (SECURITY_STATUS)0x8009030CL -#define SEC_E_UNKNOWN_CREDENTIALS (SECURITY_STATUS)0x8009030DL -#define SEC_E_NO_CREDENTIALS (SECURITY_STATUS)0x8009030EL -#define SEC_E_MESSAGE_ALTERED (SECURITY_STATUS)0x8009030FL -#define SEC_E_OUT_OF_SEQUENCE (SECURITY_STATUS)0x80090310L -#define SEC_E_NO_AUTHENTICATING_AUTHORITY (SECURITY_STATUS)0x80090311L -#define SEC_E_BAD_PKGID (SECURITY_STATUS)0x80090316L -#define SEC_E_CONTEXT_EXPIRED (SECURITY_STATUS)0x80090317L -#define SEC_E_INCOMPLETE_MESSAGE (SECURITY_STATUS)0x80090318L -#define SEC_E_INCOMPLETE_CREDENTIALS (SECURITY_STATUS)0x80090320L -#define SEC_E_BUFFER_TOO_SMALL (SECURITY_STATUS)0x80090321L -#define SEC_E_WRONG_PRINCIPAL (SECURITY_STATUS)0x80090322L -#define SEC_E_TIME_SKEW (SECURITY_STATUS)0x80090324L -#define SEC_E_UNTRUSTED_ROOT (SECURITY_STATUS)0x80090325L -#define SEC_E_ILLEGAL_MESSAGE (SECURITY_STATUS)0x80090326L -#define SEC_E_CERT_UNKNOWN (SECURITY_STATUS)0x80090327L -#define SEC_E_CERT_EXPIRED (SECURITY_STATUS)0x80090328L -#define SEC_E_ENCRYPT_FAILURE (SECURITY_STATUS)0x80090329L -#define SEC_E_DECRYPT_FAILURE (SECURITY_STATUS)0x80090330L -#define SEC_E_ALGORITHM_MISMATCH (SECURITY_STATUS)0x80090331L -#define SEC_E_SECURITY_QOS_FAILED (SECURITY_STATUS)0x80090332L -#define SEC_E_UNFINISHED_CONTEXT_DELETED (SECURITY_STATUS)0x80090333L -#define SEC_E_NO_TGT_REPLY (SECURITY_STATUS)0x80090334L -#define SEC_E_NO_IP_ADDRESSES (SECURITY_STATUS)0x80090335L -#define SEC_E_WRONG_CREDENTIAL_HANDLE (SECURITY_STATUS)0x80090336L -#define SEC_E_CRYPTO_SYSTEM_INVALID (SECURITY_STATUS)0x80090337L -#define SEC_E_MAX_REFERRALS_EXCEEDED (SECURITY_STATUS)0x80090338L -#define SEC_E_MUST_BE_KDC (SECURITY_STATUS)0x80090339L -#define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED (SECURITY_STATUS)0x8009033AL -#define SEC_E_TOO_MANY_PRINCIPALS (SECURITY_STATUS)0x8009033BL -#define SEC_E_NO_PA_DATA (SECURITY_STATUS)0x8009033CL -#define SEC_E_PKINIT_NAME_MISMATCH (SECURITY_STATUS)0x8009033DL -#define SEC_E_SMARTCARD_LOGON_REQUIRED (SECURITY_STATUS)0x8009033EL -#define SEC_E_SHUTDOWN_IN_PROGRESS (SECURITY_STATUS)0x8009033FL -#define SEC_E_KDC_INVALID_REQUEST (SECURITY_STATUS)0x80090340L -#define SEC_E_KDC_UNABLE_TO_REFER (SECURITY_STATUS)0x80090341L -#define SEC_E_KDC_UNKNOWN_ETYPE (SECURITY_STATUS)0x80090342L -#define SEC_E_UNSUPPORTED_PREAUTH (SECURITY_STATUS)0x80090343L -#define SEC_E_DELEGATION_REQUIRED (SECURITY_STATUS)0x80090345L -#define SEC_E_BAD_BINDINGS (SECURITY_STATUS)0x80090346L -#define SEC_E_MULTIPLE_ACCOUNTS (SECURITY_STATUS)0x80090347L -#define SEC_E_NO_KERB_KEY (SECURITY_STATUS)0x80090348L -#define SEC_E_CERT_WRONG_USAGE (SECURITY_STATUS)0x80090349L -#define SEC_E_DOWNGRADE_DETECTED (SECURITY_STATUS)0x80090350L -#define SEC_E_SMARTCARD_CERT_REVOKED (SECURITY_STATUS)0x80090351L -#define SEC_E_ISSUING_CA_UNTRUSTED (SECURITY_STATUS)0x80090352L -#define SEC_E_REVOCATION_OFFLINE_C (SECURITY_STATUS)0x80090353L -#define SEC_E_PKINIT_CLIENT_FAILURE (SECURITY_STATUS)0x80090354L -#define SEC_E_SMARTCARD_CERT_EXPIRED (SECURITY_STATUS)0x80090355L -#define SEC_E_NO_S4U_PROT_SUPPORT (SECURITY_STATUS)0x80090356L -#define SEC_E_CROSSREALM_DELEGATION_FAILURE (SECURITY_STATUS)0x80090357L -#define SEC_E_REVOCATION_OFFLINE_KDC (SECURITY_STATUS)0x80090358L -#define SEC_E_ISSUING_CA_UNTRUSTED_KDC (SECURITY_STATUS)0x80090359L -#define SEC_E_KDC_CERT_EXPIRED (SECURITY_STATUS)0x8009035AL -#define SEC_E_KDC_CERT_REVOKED (SECURITY_STATUS)0x8009035BL -#define SEC_E_INVALID_PARAMETER (SECURITY_STATUS)0x8009035DL -#define SEC_E_DELEGATION_POLICY (SECURITY_STATUS)0x8009035EL -#define SEC_E_POLICY_NLTM_ONLY (SECURITY_STATUS)0x8009035FL -#define SEC_E_NO_CONTEXT (SECURITY_STATUS)0x80090361L -#define SEC_E_PKU2U_CERT_FAILURE (SECURITY_STATUS)0x80090362L -#define SEC_E_MUTUAL_AUTH_FAILED (SECURITY_STATUS)0x80090363L +#define SEC_E_OK WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00000000) +#define SEC_E_INSUFFICIENT_MEMORY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090300) +#define SEC_E_INVALID_HANDLE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090301) +#define SEC_E_UNSUPPORTED_FUNCTION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090302) +#define SEC_E_TARGET_UNKNOWN WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090303) +#define SEC_E_INTERNAL_ERROR WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090304) +#define SEC_E_SECPKG_NOT_FOUND WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090305) +#define SEC_E_NOT_OWNER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090306) +#define SEC_E_CANNOT_INSTALL WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090307) +#define SEC_E_INVALID_TOKEN WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090308) +#define SEC_E_CANNOT_PACK WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090309) +#define SEC_E_QOP_NOT_SUPPORTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030A) +#define SEC_E_NO_IMPERSONATION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030B) +#define SEC_E_LOGON_DENIED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030C) +#define SEC_E_UNKNOWN_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030D) +#define SEC_E_NO_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030E) +#define SEC_E_MESSAGE_ALTERED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030F) +#define SEC_E_OUT_OF_SEQUENCE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090310) +#define SEC_E_NO_AUTHENTICATING_AUTHORITY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090311) +#define SEC_E_BAD_PKGID WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090316) +#define SEC_E_CONTEXT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090317) +#define SEC_E_INCOMPLETE_MESSAGE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090318) +#define SEC_E_INCOMPLETE_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090320) +#define SEC_E_BUFFER_TOO_SMALL WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090321) +#define SEC_E_WRONG_PRINCIPAL WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090322) +#define SEC_E_TIME_SKEW WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090324) +#define SEC_E_UNTRUSTED_ROOT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090325) +#define SEC_E_ILLEGAL_MESSAGE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090326) +#define SEC_E_CERT_UNKNOWN WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090327) +#define SEC_E_CERT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090328) +#define SEC_E_ENCRYPT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090329) +#define SEC_E_DECRYPT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090330) +#define SEC_E_ALGORITHM_MISMATCH WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090331) +#define SEC_E_SECURITY_QOS_FAILED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090332) +#define SEC_E_UNFINISHED_CONTEXT_DELETED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090333) +#define SEC_E_NO_TGT_REPLY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090334) +#define SEC_E_NO_IP_ADDRESSES WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090335) +#define SEC_E_WRONG_CREDENTIAL_HANDLE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090336) +#define SEC_E_CRYPTO_SYSTEM_INVALID WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090337) +#define SEC_E_MAX_REFERRALS_EXCEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090338) +#define SEC_E_MUST_BE_KDC WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090339) +#define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033A) +#define SEC_E_TOO_MANY_PRINCIPALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033B) +#define SEC_E_NO_PA_DATA WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033C) +#define SEC_E_PKINIT_NAME_MISMATCH WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033D) +#define SEC_E_SMARTCARD_LOGON_REQUIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033E) +#define SEC_E_SHUTDOWN_IN_PROGRESS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033F) +#define SEC_E_KDC_INVALID_REQUEST WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090340) +#define SEC_E_KDC_UNABLE_TO_REFER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090341) +#define SEC_E_KDC_UNKNOWN_ETYPE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090342) +#define SEC_E_UNSUPPORTED_PREAUTH WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090343) +#define SEC_E_DELEGATION_REQUIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090345) +#define SEC_E_BAD_BINDINGS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090346) +#define SEC_E_MULTIPLE_ACCOUNTS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090347) +#define SEC_E_NO_KERB_KEY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090348) +#define SEC_E_CERT_WRONG_USAGE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090349) +#define SEC_E_DOWNGRADE_DETECTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090350) +#define SEC_E_SMARTCARD_CERT_REVOKED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090351) +#define SEC_E_ISSUING_CA_UNTRUSTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090352) +#define SEC_E_REVOCATION_OFFLINE_C WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090353) +#define SEC_E_PKINIT_CLIENT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090354) +#define SEC_E_SMARTCARD_CERT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090355) +#define SEC_E_NO_S4U_PROT_SUPPORT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090356) +#define SEC_E_CROSSREALM_DELEGATION_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090357) +#define SEC_E_REVOCATION_OFFLINE_KDC WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090358) +#define SEC_E_ISSUING_CA_UNTRUSTED_KDC WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090359) +#define SEC_E_KDC_CERT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035A) +#define SEC_E_KDC_CERT_REVOKED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035B) +#define SEC_E_INVALID_PARAMETER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035D) +#define SEC_E_DELEGATION_POLICY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035E) +#define SEC_E_POLICY_NLTM_ONLY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035F) +#define SEC_E_NO_CONTEXT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090361) +#define SEC_E_PKU2U_CERT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090362) +#define SEC_E_MUTUAL_AUTH_FAILED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090363) -#define SEC_I_CONTINUE_NEEDED (SECURITY_STATUS)0x00090312L -#define SEC_I_COMPLETE_NEEDED (SECURITY_STATUS)0x00090313L -#define SEC_I_COMPLETE_AND_CONTINUE (SECURITY_STATUS)0x00090314L -#define SEC_I_LOCAL_LOGON (SECURITY_STATUS)0x00090315L -#define SEC_I_CONTEXT_EXPIRED (SECURITY_STATUS)0x00090317L -#define SEC_I_INCOMPLETE_CREDENTIALS (SECURITY_STATUS)0x00090320L -#define SEC_I_RENEGOTIATE (SECURITY_STATUS)0x00090321L -#define SEC_I_NO_LSA_CONTEXT (SECURITY_STATUS)0x00090323L -#define SEC_I_SIGNATURE_NEEDED (SECURITY_STATUS)0x0009035CL -#define SEC_I_NO_RENEGOTIATION (SECURITY_STATUS)0x00090360L +#define SEC_I_CONTINUE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090312) +#define SEC_I_COMPLETE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090313) +#define SEC_I_COMPLETE_AND_CONTINUE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090314) +#define SEC_I_LOCAL_LOGON WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090315) +#define SEC_I_CONTEXT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090317) +#define SEC_I_INCOMPLETE_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090320) +#define SEC_I_RENEGOTIATE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090321) +#define SEC_I_NO_LSA_CONTEXT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090323) +#define SEC_I_SIGNATURE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x0009035C) +#define SEC_I_NO_RENEGOTIATION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090360) #endif /* _WINERROR_ */ /* ============== some definitions missing in mingw ========================*/ #ifndef SEC_E_INVALID_PARAMETER -#define SEC_E_INVALID_PARAMETER (SECURITY_STATUS)0x8009035DL +#define SEC_E_INVALID_PARAMETER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035D) #endif #ifndef SEC_E_DELEGATION_POLICY -#define SEC_E_DELEGATION_POLICY (SECURITY_STATUS)0x8009035EL +#define SEC_E_DELEGATION_POLICY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035E) #endif #ifndef SEC_E_POLICY_NLTM_ONLY -#define SEC_E_POLICY_NLTM_ONLY (SECURITY_STATUS)0x8009035FL +#define SEC_E_POLICY_NLTM_ONLY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035F) #endif #ifndef SEC_E_NO_CONTEXT -#define SEC_E_NO_CONTEXT (SECURITY_STATUS)0x80090361L +#define SEC_E_NO_CONTEXT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090361) #endif #ifndef SEC_E_PKU2U_CERT_FAILURE -#define SEC_E_PKU2U_CERT_FAILURE (SECURITY_STATUS)0x80090362L +#define SEC_E_PKU2U_CERT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090362) #endif #ifndef SEC_E_MUTUAL_AUTH_FAILED -#define SEC_E_MUTUAL_AUTH_FAILED (SECURITY_STATUS)0x80090363L +#define SEC_E_MUTUAL_AUTH_FAILED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090363) #endif #ifndef SEC_I_SIGNATURE_NEEDED -#define SEC_I_SIGNATURE_NEEDED (SECURITY_STATUS)0x0009035CL +#define SEC_I_SIGNATURE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x0009035C) #endif #ifndef SEC_I_NO_RENEGOTIATION -#define SEC_I_NO_RENEGOTIATION (SECURITY_STATUS)0x00090360L +#define SEC_I_NO_RENEGOTIATION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090360) #endif /* ==================================================================================== */ diff --git a/winpr/libwinpr/clipboard/synthetic.c b/winpr/libwinpr/clipboard/synthetic.c index 2cd3a9127..496462c7a 100644 --- a/winpr/libwinpr/clipboard/synthetic.c +++ b/winpr/libwinpr/clipboard/synthetic.c @@ -500,7 +500,7 @@ static void* clipboard_synthesize_html_format(wClipboard* clipboard, UINT32 form if (formatId == ClipboardGetFormatId(clipboard, "text/html")) { - const INT64 SrcSize = (INT64)*pSize; + const size_t SrcSize = (size_t)*pSize; const size_t DstSize = SrcSize + 200; char* body = NULL; char num[20] = { 0 }; @@ -605,7 +605,7 @@ static void* clipboard_synthesize_text_html(wClipboard* clipboard, UINT32 format if (formatId == ClipboardGetFormatId(clipboard, "HTML Format")) { const char* str = (const char*)data; - const size_t SrcSize = (INT64)*pSize; + const size_t SrcSize = *pSize; const char* begStr = strstr(str, "StartHTML:"); const char* endStr = strstr(str, "EndHTML:"); diff --git a/winpr/libwinpr/clipboard/synthetic_file.c b/winpr/libwinpr/clipboard/synthetic_file.c index fc56a7617..bdf18d20d 100644 --- a/winpr/libwinpr/clipboard/synthetic_file.c +++ b/winpr/libwinpr/clipboard/synthetic_file.c @@ -458,7 +458,7 @@ static BOOL process_uri_list(wClipboard* clipboard, const char* data, size_t len if (stop == lim) { - if (strnlen(start, stop - start) < 1) + if (strnlen(start, WINPR_ASSERTING_INT_CAST(size_t, stop - start)) < 1) return TRUE; cur = lim; } @@ -466,7 +466,7 @@ static BOOL process_uri_list(wClipboard* clipboard, const char* data, size_t len if (comment) continue; - if (!process_uri(clipboard, start, stop - start)) + if (!process_uri(clipboard, start, WINPR_ASSERTING_INT_CAST(size_t, stop - start))) return FALSE; } @@ -807,11 +807,13 @@ static void* convert_filedescriptors_to_file_list(wClipboard* clipboard, UINT32 previous_at = curName; while ((stop_at = stop_at_special_chars(previous_at)) != NULL) { - char* tmp = strndup(previous_at, stop_at - previous_at); + char* tmp = + strndup(previous_at, WINPR_ASSERTING_INT_CAST(size_t, stop_at - previous_at)); if (!tmp) goto loop_fail; - rc = _snprintf(&dst[pos], stop_at - previous_at + 1, "%s", tmp); + rc = _snprintf(&dst[pos], WINPR_ASSERTING_INT_CAST(size_t, stop_at - previous_at + 1), + "%s", tmp); free(tmp); if (rc < 0) goto loop_fail; @@ -1012,7 +1014,7 @@ error: return FALSE; } -static UINT file_get_size(const struct synthetic_file* file, UINT64* size) +static int32_t file_get_size(const struct synthetic_file* file, UINT64* size) { UINT64 s = 0; @@ -1148,8 +1150,9 @@ static UINT file_get_range(struct synthetic_file* file, UINT64 offset, UINT32 si dwHigh = offset >> 32; dwLow = offset & 0xFFFFFFFF; - if (INVALID_SET_FILE_POINTER == - SetFilePointer(file->fd, dwLow, (PLONG)&dwHigh, FILE_BEGIN)) + if (INVALID_SET_FILE_POINTER == SetFilePointer(file->fd, + WINPR_ASSERTING_INT_CAST(LONG, dwLow), + (PLONG)&dwHigh, FILE_BEGIN)) { error = GetLastError(); break; diff --git a/winpr/libwinpr/comm/comm.c b/winpr/libwinpr/comm/comm.c index 510569e38..f7115638e 100644 --- a/winpr/libwinpr/comm/comm.c +++ b/winpr/libwinpr/comm/comm.c @@ -722,7 +722,7 @@ BOOL SetCommState(HANDLE hFile, LPDCB lpDCB) if (lpDCB->fBinary) { - upcomingTermios.c_lflag &= ~ICANON; + upcomingTermios.c_lflag &= WINPR_ASSERTING_INT_CAST(tcflag_t, ~ICANON); } else { @@ -736,7 +736,7 @@ BOOL SetCommState(HANDLE hFile, LPDCB lpDCB) } else { - upcomingTermios.c_iflag &= ~INPCK; + upcomingTermios.c_iflag &= WINPR_ASSERTING_INT_CAST(tcflag_t, ~INPCK); } /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa363423%28v=vs.85%29.aspx @@ -1400,8 +1400,8 @@ HANDLE CommCreateFileA(LPCSTR lpDeviceName, DWORD dwDesiredAccess, DWORD dwShare goto error_handle; } - upcomingTermios.c_iflag &= - ~(/*IGNBRK |*/ BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL /*| IXON*/); + upcomingTermios.c_iflag &= WINPR_ASSERTING_INT_CAST( + tcflag_t, ~(/*IGNBRK |*/ BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL /*| IXON*/)); upcomingTermios.c_oflag = 0; /* <=> &= ~OPOST */ upcomingTermios.c_lflag = 0; /* <=> &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); */ /* upcomingTermios.c_cflag &= ~(CSIZE | PARENB); */ diff --git a/winpr/libwinpr/comm/comm_io.c b/winpr/libwinpr/comm/comm_io.c index f15ba4587..fa953ba1a 100644 --- a/winpr/libwinpr/comm/comm_io.c +++ b/winpr/libwinpr/comm/comm_io.c @@ -335,12 +335,13 @@ BOOL CommReadFile(HANDLE hDevice, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, goto return_false; } - *lpNumberOfBytesRead = (UINT32)nbRead; + *lpNumberOfBytesRead = WINPR_ASSERTING_INT_CAST(UINT32, nbRead); EnterCriticalSection(&pComm->EventsLock); if (pComm->PendingEvents & SERIAL_EV_WINPR_WAITING) { - if (pComm->eventChar != '\0' && memchr(lpBuffer, pComm->eventChar, nbRead)) + if (pComm->eventChar != '\0' && + memchr(lpBuffer, pComm->eventChar, WINPR_ASSERTING_INT_CAST(size_t, nbRead))) pComm->PendingEvents |= SERIAL_EV_RXCHAR; } LeaveCriticalSection(&pComm->EventsLock); diff --git a/winpr/libwinpr/comm/comm_serial_sys.c b/winpr/libwinpr/comm/comm_serial_sys.c index ff82ec8b3..f7277956f 100644 --- a/winpr/libwinpr/comm/comm_serial_sys.c +++ b/winpr/libwinpr/comm/comm_serial_sys.c @@ -438,7 +438,7 @@ static BOOL set_line_control(WINPR_COMM* pComm, const SERIAL_LINE_CONTROL* pLine switch (pLineControl->StopBits) { case STOP_BIT_1: - upcomingTermios.c_cflag &= ~CSTOPB; + upcomingTermios.c_cflag &= (uint32_t)~CSTOPB; break; case STOP_BITS_1_5: @@ -459,16 +459,16 @@ static BOOL set_line_control(WINPR_COMM* pComm, const SERIAL_LINE_CONTROL* pLine switch (pLineControl->Parity) { case NO_PARITY: - upcomingTermios.c_cflag &= ~(PARENB | PARODD | CMSPAR); + upcomingTermios.c_cflag &= (uint32_t)~(PARENB | PARODD | CMSPAR); break; case ODD_PARITY: - upcomingTermios.c_cflag &= ~CMSPAR; + upcomingTermios.c_cflag &= (uint32_t)~CMSPAR; upcomingTermios.c_cflag |= PARENB | PARODD; break; case EVEN_PARITY: - upcomingTermios.c_cflag &= ~(PARODD | CMSPAR); + upcomingTermios.c_cflag &= (uint32_t)~(PARODD | CMSPAR); upcomingTermios.c_cflag |= PARENB; break; @@ -477,7 +477,7 @@ static BOOL set_line_control(WINPR_COMM* pComm, const SERIAL_LINE_CONTROL* pLine break; case SPACE_PARITY: - upcomingTermios.c_cflag &= ~PARODD; + upcomingTermios.c_cflag &= (uint32_t)~PARODD; upcomingTermios.c_cflag |= PARENB | CMSPAR; break; @@ -491,22 +491,22 @@ static BOOL set_line_control(WINPR_COMM* pComm, const SERIAL_LINE_CONTROL* pLine switch (pLineControl->WordLength) { case 5: - upcomingTermios.c_cflag &= ~CSIZE; + upcomingTermios.c_cflag &= (uint32_t)~CSIZE; upcomingTermios.c_cflag |= CS5; break; case 6: - upcomingTermios.c_cflag &= ~CSIZE; + upcomingTermios.c_cflag &= (uint32_t)~CSIZE; upcomingTermios.c_cflag |= CS6; break; case 7: - upcomingTermios.c_cflag &= ~CSIZE; + upcomingTermios.c_cflag &= (uint32_t)~CSIZE; upcomingTermios.c_cflag |= CS7; break; case 8: - upcomingTermios.c_cflag &= ~CSIZE; + upcomingTermios.c_cflag &= (uint32_t)~CSIZE; upcomingTermios.c_cflag |= CS8; break; @@ -611,7 +611,7 @@ static BOOL set_handflow(WINPR_COMM* pComm, const SERIAL_HANDFLOW* pHandflow) } else { - upcomingTermios.c_cflag &= ~HUPCL; + upcomingTermios.c_cflag &= (uint32_t)~HUPCL; /* FIXME: is the DTR line also needs to be forced to a disable state according * SERIAL_DTR_CONTROL? */ @@ -696,7 +696,7 @@ static BOOL set_handflow(WINPR_COMM* pComm, const SERIAL_HANDFLOW* pHandflow) } else { - upcomingTermios.c_iflag &= ~IXON; + upcomingTermios.c_iflag &= (uint32_t)~IXON; } if (pHandflow->FlowReplace & SERIAL_AUTO_RECEIVE) @@ -705,14 +705,14 @@ static BOOL set_handflow(WINPR_COMM* pComm, const SERIAL_HANDFLOW* pHandflow) } else { - upcomingTermios.c_iflag &= ~IXOFF; + upcomingTermios.c_iflag &= (uint32_t)~IXOFF; } // FIXME: could be implemented during read/write I/O, as of today ErrorChar is necessary '\0' if (pHandflow->FlowReplace & SERIAL_ERROR_CHAR) { /* errors will be replaced by the character '\0'. */ - upcomingTermios.c_iflag &= ~IGNPAR; + upcomingTermios.c_iflag &= (uint32_t)~IGNPAR; } else { @@ -725,7 +725,7 @@ static BOOL set_handflow(WINPR_COMM* pComm, const SERIAL_HANDFLOW* pHandflow) } else { - upcomingTermios.c_iflag &= ~IGNBRK; + upcomingTermios.c_iflag &= (uint32_t)~IGNBRK; } // FIXME: could be implemented during read/write I/O @@ -1073,7 +1073,7 @@ static BOOL set_wait_mask(WINPR_COMM* pComm, const ULONG* pWaitMask) Sleep(10); /* 10ms */ EnterCriticalSection(&pComm->EventsLock); - pComm->PendingEvents &= ~SERIAL_EV_WINPR_STOP; + pComm->PendingEvents &= (uint32_t)~SERIAL_EV_WINPR_STOP; LeaveCriticalSection(&pComm->EventsLock); } @@ -1159,8 +1159,8 @@ static BOOL purge(WINPR_COMM* pComm, const ULONG* pPurgeMask) WINPR_ASSERT(pComm); WINPR_ASSERT(pPurgeMask); - if ((*pPurgeMask & ~(SERIAL_PURGE_TXABORT | SERIAL_PURGE_RXABORT | SERIAL_PURGE_TXCLEAR | - SERIAL_PURGE_RXCLEAR)) > 0) + if ((*pPurgeMask & (uint32_t)~(SERIAL_PURGE_TXABORT | SERIAL_PURGE_RXABORT | + SERIAL_PURGE_TXCLEAR | SERIAL_PURGE_RXCLEAR)) > 0) { CommLog_Print(WLOG_WARN, "Invalid purge mask: 0x%" PRIX32 "\n", *pPurgeMask); SetLastError(ERROR_INVALID_PARAMETER); @@ -1379,7 +1379,7 @@ static BOOL get_commstatus(WINPR_COMM* pComm, SERIAL_STATUS* pCommstatus) { /* FIXME: "now empty" from the specs is ambiguous, need to track previous completed * transmission? */ - pComm->PendingEvents &= ~SERIAL_EV_TXEMPTY; + pComm->PendingEvents &= (uint32_t)~SERIAL_EV_TXEMPTY; } if (currentCounters.cts != pComm->counters.cts) @@ -1413,7 +1413,7 @@ static BOOL get_commstatus(WINPR_COMM* pComm, SERIAL_STATUS* pCommstatus) { /* FIXME: "is 80 percent full" from the specs is ambiguous, need to track when it previously * * occurred? */ - pComm->PendingEvents &= ~SERIAL_EV_RX80FULL; + pComm->PendingEvents &= (uint32_t)~SERIAL_EV_RX80FULL; } rc = TRUE; @@ -1452,7 +1452,7 @@ static void consume_event(WINPR_COMM* pComm, ULONG* pOutputMask, ULONG event) static BOOL unlock_return(WINPR_COMM* pComm, BOOL res) { EnterCriticalSection(&pComm->EventsLock); - pComm->PendingEvents &= ~SERIAL_EV_WINPR_WAITING; + pComm->PendingEvents &= (uint32_t)~SERIAL_EV_WINPR_WAITING; LeaveCriticalSection(&pComm->EventsLock); return res; } @@ -1620,7 +1620,7 @@ static BOOL config_size(WINPR_COMM* pComm, ULONG* pSize) static BOOL immediate_char(WINPR_COMM* pComm, const UCHAR* pChar) { BOOL result = 0; - DWORD nbBytesWritten = -1; + DWORD nbBytesWritten = 0; WINPR_ASSERT(pComm); WINPR_ASSERT(pChar); diff --git a/winpr/libwinpr/crt/conversion.c b/winpr/libwinpr/crt/conversion.c index 0eb354cf8..26044e57f 100644 --- a/winpr/libwinpr/crt/conversion.c +++ b/winpr/libwinpr/crt/conversion.c @@ -28,9 +28,7 @@ errno_t _itoa_s(int value, char* buffer, size_t sizeInCharacters, int radix) { - int length = 0; - - length = sprintf_s(NULL, 0, "%d", value); + int length = sprintf_s(NULL, 0, "%d", value); if (length < 0) return -1; @@ -38,7 +36,7 @@ errno_t _itoa_s(int value, char* buffer, size_t sizeInCharacters, int radix) if (sizeInCharacters < (size_t)length) return -1; - (void)sprintf_s(buffer, length + 1, "%d", value); + (void)sprintf_s(buffer, WINPR_ASSERTING_INT_CAST(size_t, length + 1), "%d", value); return 0; } diff --git a/winpr/libwinpr/crt/test/TestUnicodeConversion.c b/winpr/libwinpr/crt/test/TestUnicodeConversion.c index a8dc1b0bd..91e817f5f 100644 --- a/winpr/libwinpr/crt/test/TestUnicodeConversion.c +++ b/winpr/libwinpr/crt/test/TestUnicodeConversion.c @@ -97,7 +97,8 @@ static BOOL compare_utf16_int(const WCHAR* what, size_t buffersize, SSIZE_T rc, } else { - if (!check_short_buffer(prefix, rc, buffersize, test, FALSE)) + if (!check_short_buffer(prefix, WINPR_ASSERTING_INT_CAST(SSIZE_T, rc), buffersize, test, + FALSE)) return FALSE; } @@ -151,7 +152,8 @@ static BOOL compare_utf8_int(const char* what, size_t buffersize, SSIZE_T rc, SS } else { - if (!check_short_buffer(prefix, rc, buffersize, test, TRUE)) + if (!check_short_buffer(prefix, WINPR_ASSERTING_INT_CAST(SSIZE_T, rc), buffersize, test, + TRUE)) return FALSE; } @@ -220,7 +222,8 @@ static BOOL test_convert_to_utf16_n(const testcase_t* test) if ((rc2 < 0) || ((size_t)rc2 != wlen)) { char prefix[8192] = { 0 }; - create_prefix(prefix, ARRAYSIZE(prefix), 0, rc2, test->utf8len, test, __func__, __LINE__); + create_prefix(prefix, ARRAYSIZE(prefix), 0, rc2, + WINPR_ASSERTING_INT_CAST(SSIZE_T, test->utf8len), test, __func__, __LINE__); (void)fprintf(stderr, "%s ConvertUtf8NToWChar(%s, %" PRIuz ", NULL, 0) expected %" PRIuz ", got %" PRIdz "\n", @@ -285,7 +288,8 @@ static BOOL test_convert_to_utf8_n(const testcase_t* test) if ((rc2 < 0) || ((size_t)rc2 != wlen)) { char prefix[8192] = { 0 }; - create_prefix(prefix, ARRAYSIZE(prefix), 0, rc2, test->utf16len, test, __func__, __LINE__); + create_prefix(prefix, ARRAYSIZE(prefix), 0, rc2, + WINPR_ASSERTING_INT_CAST(SSIZE_T, test->utf16len), test, __func__, __LINE__); (void)fprintf(stderr, "%s ConvertWCharNToUtf8(%s, %" PRIuz ", NULL, 0) expected %" PRIuz ", got %" PRIdz "\n", diff --git a/winpr/libwinpr/crt/unicode_builtin.c b/winpr/libwinpr/crt/unicode_builtin.c index a011a3288..394122fdc 100644 --- a/winpr/libwinpr/crt/unicode_builtin.c +++ b/winpr/libwinpr/crt/unicode_builtin.c @@ -41,6 +41,7 @@ See the header file "utf.h" for complete documentation. #include #include #include +#include #include "unicode.h" @@ -392,7 +393,8 @@ static ConversionResult winpr_ConvertUTF8toUTF16_Internal(const uint8_t** source while (source < sourceEnd) { uint32_t ch = 0; - unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; + unsigned short extraBytesToRead = + WINPR_ASSERTING_INT_CAST(unsigned short, trailingBytesForUTF8[*source]); if ((source + extraBytesToRead) >= sourceEnd) { @@ -572,7 +574,7 @@ static int winpr_ConvertUTF8toUTF16(const uint8_t* src, int cchSrc, uint16_t* ds return 0; } - return (result == conversionOK) ? length : 0; + return (result == conversionOK) ? WINPR_ASSERTING_INT_CAST(int, length) : 0; } static int winpr_ConvertUTF16toUTF8(const uint16_t* src, int cchSrc, uint8_t* dst, int cchDst) @@ -614,7 +616,7 @@ static int winpr_ConvertUTF16toUTF8(const uint16_t* src, int cchSrc, uint8_t* ds return 0; } - return (result == conversionOK) ? length : 0; + return (result == conversionOK) ? WINPR_ASSERTING_INT_CAST(int, length) : 0; } /* --------------------------------------------------------------------- */ @@ -655,7 +657,8 @@ int int_MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, return 0; } - return winpr_ConvertUTF8toUTF16((const uint8_t*)lpMultiByteStr, cbCharLen, + return winpr_ConvertUTF8toUTF16((const uint8_t*)lpMultiByteStr, + WINPR_ASSERTING_INT_CAST(int, cbCharLen), (uint16_t*)lpWideCharStr, cchWideChar); } @@ -690,6 +693,7 @@ int int_WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, * in bytes for lpMultiByteStr and makes no use of the output parameter itself. */ - return winpr_ConvertUTF16toUTF8((const uint16_t*)lpWideCharStr, cbCharLen, + return winpr_ConvertUTF16toUTF8((const uint16_t*)lpWideCharStr, + WINPR_ASSERTING_INT_CAST(int, cbCharLen), (uint8_t*)lpMultiByteStr, cbMultiByte); } diff --git a/winpr/libwinpr/crt/unicode_icu.c b/winpr/libwinpr/crt/unicode_icu.c index 1ebc5587e..0f8c3ab0f 100644 --- a/winpr/libwinpr/crt/unicode_icu.c +++ b/winpr/libwinpr/crt/unicode_icu.c @@ -62,14 +62,14 @@ int int_MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, if (isNullTerminated) len = strlen(lpMultiByteStr) + 1; else - len = cbMultiByte; + len = WINPR_ASSERTING_INT_CAST(size_t, cbMultiByte); if (len >= INT_MAX) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } - cbMultiByte = (int)len; + cbMultiByte = WINPR_ASSERTING_INT_CAST(int, len); /* * if cchWideChar is 0, the function returns the required buffer size @@ -161,14 +161,14 @@ int int_WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, if (cchWideChar == -1) len = _wcslen(lpWideCharStr) + 1; else - len = cchWideChar; + len = WINPR_ASSERTING_INT_CAST(size_t, cchWideChar); if (len >= INT32_MAX) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } - cchWideChar = (int)len; + cchWideChar = WINPR_ASSERTING_INT_CAST(int, len); /* * if cbMultiByte is 0, the function returns the required buffer size diff --git a/winpr/libwinpr/crypto/cipher.c b/winpr/libwinpr/crypto/cipher.c index aa2ebe271..c2ffa2b33 100644 --- a/winpr/libwinpr/crypto/cipher.c +++ b/winpr/libwinpr/crypto/cipher.c @@ -778,7 +778,7 @@ int winpr_Cipher_BytesToKey(int cipher, WINPR_MD_TYPE md, const void* salt, cons const EVP_MD* evp_md = NULL; const EVP_CIPHER* evp_cipher = NULL; evp_md = winpr_openssl_get_evp_md(md); - evp_cipher = winpr_openssl_get_evp_cipher(cipher); + evp_cipher = winpr_openssl_get_evp_cipher(WINPR_ASSERTING_INT_CAST(WINPR_CIPHER_TYPE, cipher)); WINPR_ASSERT(datal <= INT_MAX); WINPR_ASSERT(count <= INT_MAX); return EVP_BytesToKey(evp_cipher, evp_md, salt, data, (int)datal, (int)count, key, iv); diff --git a/winpr/libwinpr/crypto/hash.c b/winpr/libwinpr/crypto/hash.c index 2f5a87c87..55d13d8c0 100644 --- a/winpr/libwinpr/crypto/hash.c +++ b/winpr/libwinpr/crypto/hash.c @@ -548,6 +548,7 @@ BOOL winpr_Digest_Init_Allow_FIPS(WINPR_DIGEST_CTX* ctx, WINPR_MD_TYPE md) #if defined(WITH_OPENSSL) #if OPENSSL_VERSION_NUMBER >= 0x30000000L +#if !defined(WITH_INTERNAL_MD5) if (md == WINPR_MD_MD5) { EVP_MD* md5 = EVP_MD_fetch(NULL, "MD5", "fips=no"); @@ -555,6 +556,7 @@ BOOL winpr_Digest_Init_Allow_FIPS(WINPR_DIGEST_CTX* ctx, WINPR_MD_TYPE md) EVP_MD_free(md5); return rc; } +#endif #endif const EVP_MD* evp = winpr_openssl_get_evp_md(md); EVP_MD_CTX_set_flags(ctx->mdctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); diff --git a/winpr/libwinpr/crypto/rc4.c b/winpr/libwinpr/crypto/rc4.c index aed2ee601..c1ea61706 100644 --- a/winpr/libwinpr/crypto/rc4.c +++ b/winpr/libwinpr/crypto/rc4.c @@ -18,6 +18,7 @@ * limitations under the License. */ #include +#include #include "rc4.h" @@ -46,7 +47,7 @@ winpr_int_RC4_CTX* winpr_int_rc4_new(const BYTE* key, size_t keylength) for (size_t i = 0; i < CTX_SIZE; i++) { - ctx->s[i] = i; + ctx->s[i] = WINPR_ASSERTING_INT_CAST(BYTE, i); ctx->t[i] = key[i % keylength]; } diff --git a/winpr/libwinpr/environment/environment.c b/winpr/libwinpr/environment/environment.c index f9a598eb5..5efd0e205 100644 --- a/winpr/libwinpr/environment/environment.c +++ b/winpr/libwinpr/environment/environment.c @@ -422,7 +422,8 @@ LPCH MergeEnvironmentStrings(PCSTR original, PCSTR merge) if (!foundEquals) continue; - if (strncmp(envp, mergeStrings[run], foundEquals - mergeStrings[run] + 1) == 0) + const intptr_t len = foundEquals - mergeStrings[run] + 1; + if (strncmp(envp, mergeStrings[run], WINPR_ASSERTING_INT_CAST(size_t, len)) == 0) { // found variable in merge list ... use this .... if (*(foundEquals + 1) == '\0') @@ -534,7 +535,7 @@ DWORD GetEnvironmentVariableEBA(LPCSTR envBlock, LPCSTR lpName, LPSTR lpBuffer, return 0; } - nLength = (foundEquals - penvb); + nLength = WINPR_ASSERTING_INT_CAST(size_t, (foundEquals - penvb)); if (nLength != lpNameLength) { diff --git a/winpr/libwinpr/file/file.c b/winpr/libwinpr/file/file.c index 9bee49970..7536a8a02 100644 --- a/winpr/libwinpr/file/file.c +++ b/winpr/libwinpr/file/file.c @@ -963,7 +963,7 @@ static HANDLE FileCreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dw if (fstat(fileno(pFile->fp), &st) == 0 && dwFlagsAndAttributes & FILE_ATTRIBUTE_READONLY) { - st.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH); + st.st_mode &= WINPR_ASSERTING_INT_CAST(mode_t, ~(S_IWUSR | S_IWGRP | S_IWOTH)); fchmod(fileno(pFile->fp), st.st_mode); } diff --git a/winpr/libwinpr/file/generic.c b/winpr/libwinpr/file/generic.c index 9d3acd700..cee2aaefe 100644 --- a/winpr/libwinpr/file/generic.c +++ b/winpr/libwinpr/file/generic.c @@ -630,7 +630,7 @@ BOOL SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes) if (dwFileAttributes & FILE_ATTRIBUTE_READONLY) { - st.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH); + st.st_mode &= WINPR_ASSERTING_INT_CAST(mode_t, (mode_t)(~(S_IWUSR | S_IWGRP | S_IWOTH))); } else { diff --git a/winpr/libwinpr/file/pattern.c b/winpr/libwinpr/file/pattern.c index 85e57a6dc..cb4d61806 100644 --- a/winpr/libwinpr/file/pattern.c +++ b/winpr/libwinpr/file/pattern.c @@ -326,9 +326,9 @@ BOOL FilePatternMatchA(LPCSTR lpFileName, LPCSTR lpPattern) if (!lpNextWildcard) { lpX = lpSubPattern; - cchX = (lpWildcard - lpSubPattern); + cchX = WINPR_ASSERTING_INT_CAST(size_t, (lpWildcard - lpSubPattern)); lpY = &lpSubPattern[cchX + cchWildcard]; - cchY = (cchSubPattern - (lpY - lpSubPattern)); + cchY = (cchSubPattern - WINPR_ASSERTING_INT_CAST(size_t, (lpY - lpSubPattern))); match = FilePatternMatchSubExpressionA(lpSubFileName, cchSubFileName, lpX, cchX, lpY, cchY, lpWildcard, &lpMatchEnd); return match; @@ -337,12 +337,14 @@ BOOL FilePatternMatchA(LPCSTR lpFileName, LPCSTR lpPattern) { while (lpNextWildcard) { - cchSubFileName = cchFileName - (lpSubFileName - lpFileName); + cchSubFileName = + cchFileName - WINPR_ASSERTING_INT_CAST(size_t, (lpSubFileName - lpFileName)); cchNextWildcard = ((dwNextFlags & WILDCARD_DOS) ? 2 : 1); lpX = lpSubPattern; - cchX = (lpWildcard - lpSubPattern); + cchX = WINPR_ASSERTING_INT_CAST(size_t, (lpWildcard - lpSubPattern)); lpY = &lpSubPattern[cchX + cchWildcard]; - cchY = (lpNextWildcard - lpWildcard) - cchWildcard; + cchY = + WINPR_ASSERTING_INT_CAST(size_t, (lpNextWildcard - lpWildcard)) - cchWildcard; match = FilePatternMatchSubExpressionA(lpSubFileName, cchSubFileName, lpX, cchX, lpY, cchY, lpWildcard, &lpMatchEnd); diff --git a/winpr/libwinpr/ncrypt/ncrypt_pkcs11.c b/winpr/libwinpr/ncrypt/ncrypt_pkcs11.c index f9a5ac754..a8cde64ee 100644 --- a/winpr/libwinpr/ncrypt/ncrypt_pkcs11.c +++ b/winpr/libwinpr/ncrypt/ncrypt_pkcs11.c @@ -579,11 +579,11 @@ static void wprintKeyName(LPWSTR str, CK_SLOT_ID slotId, CK_BYTE* id, CK_ULONG i static size_t parseHex(const char* str, const char* end, CK_BYTE* target) { - int ret = 0; + size_t ret = 0; for (; str != end && *str; str++, ret++, target++) { - CK_BYTE v = 0; + int v = 0; if (*str <= '9' && *str >= '0') { v = (*str - '0'); @@ -623,7 +623,7 @@ static size_t parseHex(const char* str, const char* end, CK_BYTE* target) return 0; } - *target = v; + *target = v & 0xFF; } return ret; } diff --git a/winpr/libwinpr/path/shell.c b/winpr/libwinpr/path/shell.c index 28895cd86..81c70d045 100644 --- a/winpr/libwinpr/path/shell.c +++ b/winpr/libwinpr/path/shell.c @@ -390,7 +390,8 @@ char* GetKnownPath(eKnownPathTypes id) } if (!path) - WLog_WARN(TAG, "Path %s is %p", GetKnownPathIdString(id), path); + WLog_WARN(TAG, "Path %s is %p", GetKnownPathIdString(WINPR_ASSERTING_INT_CAST(int, id)), + path); return path; } diff --git a/winpr/libwinpr/registry/registry_reg.c b/winpr/libwinpr/registry/registry_reg.c index d3c48980c..698210c06 100644 --- a/winpr/libwinpr/registry/registry_reg.c +++ b/winpr/libwinpr/registry/registry_reg.c @@ -227,20 +227,17 @@ static RegVal* reg_load_value(const Reg* reg, RegKey* key) break; case REG_SZ: { - size_t len = 0; - size_t cmp = 0; - char* end = NULL; char* start = strchr(data, '"'); if (!start) goto fail; /* Check for terminating quote, check it is the last symbol */ - len = strlen(start); - end = strchr(start + 1, '"'); + const size_t len = strlen(start); + char* end = strchr(start + 1, '"'); if (!end) goto fail; - cmp = end - start + 1; - if (len != cmp) + const intptr_t cmp = end - start + 1; + if ((cmp < 0) || (len != WINPR_ASSERTING_INT_CAST(size_t, cmp))) goto fail; if (start[0] == '"') start++; diff --git a/winpr/libwinpr/rpc/rpc.c b/winpr/libwinpr/rpc/rpc.c index 47e42f0f1..16bcb9717 100644 --- a/winpr/libwinpr/rpc/rpc.c +++ b/winpr/libwinpr/rpc/rpc.c @@ -732,12 +732,13 @@ RPC_STATUS UuidToStringW(const UUID* Uuid, RPC_WSTR* StringUuid) RPC_STATUS UuidFromStringA(RPC_CSTR StringUuid, UUID* Uuid) { - BYTE bin[36]; + BYTE bin[36] = { 0 }; if (!StringUuid) return UuidCreateNil(Uuid); - if (strlen((char*)StringUuid) != 36) + const size_t slen = 2 * sizeof(UUID) + 4; + if (strnlen(StringUuid, slen) != slen) return RPC_S_INVALID_STRING_UUID; if ((StringUuid[8] != '-') || (StringUuid[13] != '-') || (StringUuid[18] != '-') || @@ -746,17 +747,17 @@ RPC_STATUS UuidFromStringA(RPC_CSTR StringUuid, UUID* Uuid) return RPC_S_INVALID_STRING_UUID; } - for (int index = 0; index < 36; index++) + for (size_t index = 0; index < 36; index++) { if ((index == 8) || (index == 13) || (index == 18) || (index == 23)) continue; if ((StringUuid[index] >= '0') && (StringUuid[index] <= '9')) - bin[index] = StringUuid[index] - '0'; + bin[index] = (StringUuid[index] - '0') & 0xFF; else if ((StringUuid[index] >= 'a') && (StringUuid[index] <= 'f')) - bin[index] = StringUuid[index] - 'a' + 10; + bin[index] = (StringUuid[index] - 'a' + 10) & 0xFF; else if ((StringUuid[index] >= 'A') && (StringUuid[index] <= 'F')) - bin[index] = StringUuid[index] - 'A' + 10; + bin[index] = (StringUuid[index] - 'A' + 10) & 0xFF; else return RPC_S_INVALID_STRING_UUID; } diff --git a/winpr/libwinpr/shell/shell.c b/winpr/libwinpr/shell/shell.c index 7c550dcd6..75a6d504c 100644 --- a/winpr/libwinpr/shell/shell.c +++ b/winpr/libwinpr/shell/shell.c @@ -18,7 +18,7 @@ */ #include - +#include #include /** @@ -68,7 +68,8 @@ BOOL GetUserProfileDirectoryA(HANDLE hToken, LPSTR lpProfileDir, LPDWORD lpcchSi if (!buf) return FALSE; - const int status = getpwnam_r(token->Username, &pwd, buf, buflen, &pw); + const int status = + getpwnam_r(token->Username, &pwd, buf, WINPR_ASSERTING_INT_CAST(size_t, buflen), &pw); if ((status != 0) || !pw) { diff --git a/winpr/libwinpr/sspi/Kerberos/kerberos.c b/winpr/libwinpr/sspi/Kerberos/kerberos.c index 87335316c..d912200ee 100644 --- a/winpr/libwinpr/sspi/Kerberos/kerberos.c +++ b/winpr/libwinpr/sspi/Kerberos/kerberos.c @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -126,6 +127,9 @@ static const WinPrAsn1_OID kerberos_OID = { 9, (void*)"\x2a\x86\x48\x86\xf7\x12\ static const WinPrAsn1_OID kerberos_u2u_OID = { 10, (void*)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x03" }; +#define krb_log_exec_bool(fkt, ctx, ...) \ + kerberos_log_msg(ctx, fkt(ctx, ##__VA_ARGS__) ? KRB5KRB_ERR_GENERIC : 0, #fkt, __FILE__, \ + __func__, __LINE__) #define krb_log_exec(fkt, ctx, ...) \ kerberos_log_msg(ctx, fkt(ctx, ##__VA_ARGS__), #fkt, __FILE__, __func__, __LINE__) #define krb_log_exec_ptr(fkt, ctx, ...) \ @@ -405,7 +409,7 @@ static SECURITY_STATUS SEC_ENTRY kerberos_AcquireCredentialsHandleA( { krb5_creds creds = { 0 }; krb5_creds matchCreds = { 0 }; - int matchFlags = KRB5_TC_MATCH_TIMES; + krb5_flags matchFlags = KRB5_TC_MATCH_TIMES; krb5_timeofday(ctx, &matchCreds.times.endtime); matchCreds.times.endtime += 60; @@ -1348,10 +1352,10 @@ static SECURITY_STATUS SEC_ENTRY kerberos_AcceptSecurityContext( if (rv != 0) goto cleanup; - if ((!sname || krb_log_exec(krb5_principal_compare_any_realm, credentials->ctx, - principal, entry.principal)) && - (!realm || - krb_log_exec(krb5_realm_compare, credentials->ctx, principal, entry.principal))) + if ((!sname || krb_log_exec_bool(krb5_principal_compare_any_realm, credentials->ctx, + principal, entry.principal)) && + (!realm || krb_log_exec_bool(krb5_realm_compare, credentials->ctx, principal, + entry.principal))) break; if (krb_log_exec(krb5glue_free_keytab_entry_contents, credentials->ctx, &entry)) goto cleanup; @@ -1597,7 +1601,7 @@ static SECURITY_STATUS kerberos_ATTR_TICKET_LOGON(KRB_CONTEXT* context, { krb5_creds matchCred = { 0 }; krb5_auth_context authContext = NULL; - int getCredsFlags = KRB5_GC_CACHED; + krb5_flags getCredsFlags = KRB5_GC_CACHED; BOOL firstRun = TRUE; krb5_creds* hostCred = NULL; SECURITY_STATUS ret = SEC_E_INSUFFICIENT_MEMORY; @@ -1866,7 +1870,7 @@ static SECURITY_STATUS SEC_ENTRY kerberos_EncryptMessage(PCtxtHandle phContext, /* Write the GSS header with 0 in RRC */ winpr_Data_Write_UINT16_BE(header, TOK_ID_WRAP); - header[2] = flags; + header[2] = WINPR_ASSERTING_INT_CAST(char, flags); header[3] = (char)0xFF; winpr_Data_Write_UINT32(header + 4, 0); winpr_Data_Write_UINT64_BE(header + 8, (context->local_seq + MessageSeqNo)); @@ -1875,8 +1879,8 @@ static SECURITY_STATUS SEC_ENTRY kerberos_EncryptMessage(PCtxtHandle phContext, CopyMemory(encrypt_iov[2].data.data, header, 16); /* Set the correct RRC */ - winpr_Data_Write_UINT16_BE(header + 6, - 16 + encrypt_iov[3].data.length + encrypt_iov[4].data.length); + const size_t len = 16 + encrypt_iov[3].data.length + encrypt_iov[4].data.length; + winpr_Data_Write_UINT16_BE(header + 6, WINPR_ASSERTING_INT_CAST(UINT16, len)); if (krb_log_exec(krb5glue_encrypt_iov, creds->ctx, key, usage, encrypt_iov, ARRAYSIZE(encrypt_iov))) @@ -1898,7 +1902,6 @@ static SECURITY_STATUS SEC_ENTRY kerberos_DecryptMessage(PCtxtHandle phContext, PSecBuffer data_buffer = NULL; krb5glue_key key = NULL; krb5_keyusage usage = 0; - char* header = NULL; uint16_t tok_id = 0; BYTE flags = 0; uint16_t ec = 0; @@ -1925,15 +1928,15 @@ static SECURITY_STATUS SEC_ENTRY kerberos_DecryptMessage(PCtxtHandle phContext, return SEC_E_INVALID_TOKEN; /* Read in header information */ - header = sig_buffer->pvBuffer; + BYTE* header = sig_buffer->pvBuffer; tok_id = winpr_Data_Get_UINT16_BE(header); flags = header[2]; - ec = winpr_Data_Get_UINT16_BE((header + 4)); - rrc = winpr_Data_Get_UINT16_BE((header + 6)); - seq_no = winpr_Data_Get_UINT64_BE((header + 8)); + ec = winpr_Data_Get_UINT16_BE(&header[4]); + rrc = winpr_Data_Get_UINT16_BE(&header[6]); + seq_no = winpr_Data_Get_UINT64_BE(&header[8]); /* Check that the header is valid */ - if (tok_id != TOK_ID_WRAP || (BYTE)header[3] != 0xFF) + if ((tok_id != TOK_ID_WRAP) || (header[3] != 0xFF)) return SEC_E_INVALID_TOKEN; if ((flags & FLAG_SENDER_IS_ACCEPTOR) == context->acceptor) @@ -1969,11 +1972,15 @@ static SECURITY_STATUS SEC_ENTRY kerberos_DecryptMessage(PCtxtHandle phContext, return SEC_E_INVALID_TOKEN; /* Locate the parts of the message */ - iov[0].data.data = header + 16 + rrc + ec; + iov[0].data.data = (char*)&header[16 + rrc + ec]; iov[1].data.data = data_buffer->pvBuffer; - iov[2].data.data = header + 16 + ec; - iov[3].data.data = iov[2].data.data + iov[2].data.length; - iov[4].data.data = iov[3].data.data + iov[3].data.length; + iov[2].data.data = (char*)&header[16 + ec]; + char* data2 = iov[2].data.data; + iov[3].data.data = &data2[iov[2].data.length]; + + char* data3 = iov[3].data.data; + iov[4].data.data = &data2[iov[3].data.length]; + iov[4].data.data = &data3[iov[3].data.length]; if (krb_log_exec(krb5glue_decrypt_iov, creds->ctx, key, usage, iov, ARRAYSIZE(iov))) return SEC_E_INTERNAL_ERROR; @@ -2001,7 +2008,6 @@ static SECURITY_STATUS SEC_ENTRY kerberos_MakeSignature(PCtxtHandle phContext, U PSecBuffer data_buffer = NULL; krb5glue_key key = NULL; krb5_keyusage usage = 0; - char* header = NULL; BYTE flags = 0; krb5_crypto_iov iov[] = { { KRB5_CRYPTO_TYPE_DATA, { 0 } }, { KRB5_CRYPTO_TYPE_DATA, { 0 } }, @@ -2041,9 +2047,9 @@ static SECURITY_STATUS SEC_ENTRY kerberos_MakeSignature(PCtxtHandle phContext, U return SEC_E_INSUFFICIENT_MEMORY; /* Write the header */ - header = sig_buffer->pvBuffer; + char* header = sig_buffer->pvBuffer; winpr_Data_Write_UINT16_BE(header, TOK_ID_MIC); - header[2] = flags; + header[2] = WINPR_ASSERTING_INT_CAST(char, flags); memset(header + 3, 0xFF, 5); winpr_Data_Write_UINT64_BE(header + 8, (context->local_seq + MessageSeqNo)); @@ -2072,7 +2078,6 @@ static SECURITY_STATUS SEC_ENTRY kerberos_VerifySignature(PCtxtHandle phContext, PSecBuffer data_buffer = NULL; krb5glue_key key = NULL; krb5_keyusage usage = 0; - char* header = NULL; BYTE flags = 0; uint16_t tok_id = 0; uint64_t seq_no = 0; @@ -2096,7 +2101,7 @@ static SECURITY_STATUS SEC_ENTRY kerberos_VerifySignature(PCtxtHandle phContext, return SEC_E_INVALID_TOKEN; /* Read in header info */ - header = sig_buffer->pvBuffer; + BYTE* header = sig_buffer->pvBuffer; tok_id = winpr_Data_Get_UINT16_BE(header); flags = header[2]; seq_no = winpr_Data_Get_UINT64_BE((header + 8)); @@ -2132,8 +2137,8 @@ static SECURITY_STATUS SEC_ENTRY kerberos_VerifySignature(PCtxtHandle phContext, /* Set up the iov array */ iov[0].data.data = data_buffer->pvBuffer; - iov[1].data.data = header; - iov[2].data.data = header + 16; + iov[1].data.data = (char*)header; + iov[2].data.data = (char*)&header[16]; if (krb_log_exec(krb5glue_verify_checksum_iov, creds->ctx, key, usage, iov, ARRAYSIZE(iov), &is_valid)) diff --git a/winpr/libwinpr/sspi/NTLM/ntlm_av_pairs.c b/winpr/libwinpr/sspi/NTLM/ntlm_av_pairs.c index be38d5f4d..ef6a232a0 100644 --- a/winpr/libwinpr/sspi/NTLM/ntlm_av_pairs.c +++ b/winpr/libwinpr/sspi/NTLM/ntlm_av_pairs.c @@ -133,7 +133,8 @@ ULONG ntlm_av_pair_list_length(NTLM_AV_PAIR* pAvPairList, size_t cbAvPairList) if (pAvPair < pAvPairList) return 0; - const size_t size = ((PBYTE)pAvPair - (PBYTE)pAvPairList) + sizeof(NTLM_AV_PAIR); + const size_t size = WINPR_ASSERTING_INT_CAST(size_t, ((PBYTE)pAvPair - (PBYTE)pAvPairList)) + + sizeof(NTLM_AV_PAIR); WINPR_ASSERT(size <= UINT32_MAX); WINPR_ASSERT(size >= 0); return (ULONG)size; diff --git a/winpr/libwinpr/sspi/Schannel/schannel_openssl.c b/winpr/libwinpr/sspi/Schannel/schannel_openssl.c index 8ce3578f3..16c442138 100644 --- a/winpr/libwinpr/sspi/Schannel/schannel_openssl.c +++ b/winpr/libwinpr/sspi/Schannel/schannel_openssl.c @@ -155,7 +155,7 @@ int schannel_openssl_client_init(SCHANNEL_OPENSSL* context) * support empty fragments. This needs to be disabled. */ options |= SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; - SSL_CTX_set_options(context->ctx, options); + SSL_CTX_set_options(context->ctx, WINPR_ASSERTING_INT_CAST(uint64_t, options)); context->ssl = SSL_new(context->ctx); if (!context->ssl) @@ -411,11 +411,12 @@ SECURITY_STATUS schannel_openssl_client_process_tokens(SCHANNEL_OPENSSL* context if (status > 0) { - if (pBuffer->cbBuffer < (unsigned long)status) + if (pBuffer->cbBuffer < WINPR_ASSERTING_INT_CAST(uint32_t, status)) return SEC_E_INSUFFICIENT_MEMORY; - CopyMemory(pBuffer->pvBuffer, context->ReadBuffer, status); - pBuffer->cbBuffer = status; + CopyMemory(pBuffer->pvBuffer, context->ReadBuffer, + WINPR_ASSERTING_INT_CAST(uint32_t, status)); + pBuffer->cbBuffer = WINPR_ASSERTING_INT_CAST(uint32_t, status); return (context->connected) ? SEC_E_OK : SEC_I_CONTINUE_NEEDED; } else @@ -480,11 +481,12 @@ SECURITY_STATUS schannel_openssl_server_process_tokens(SCHANNEL_OPENSSL* context if (status > 0) { - if (pBuffer->cbBuffer < (unsigned long)status) + if (pBuffer->cbBuffer < WINPR_ASSERTING_INT_CAST(uint32_t, status)) return SEC_E_INSUFFICIENT_MEMORY; - CopyMemory(pBuffer->pvBuffer, context->ReadBuffer, status); - pBuffer->cbBuffer = status; + CopyMemory(pBuffer->pvBuffer, context->ReadBuffer, + WINPR_ASSERTING_INT_CAST(uint32_t, status)); + pBuffer->cbBuffer = WINPR_ASSERTING_INT_CAST(uint32_t, status); return (context->connected) ? SEC_E_OK : SEC_I_CONTINUE_NEEDED; } else @@ -575,7 +577,7 @@ SECURITY_STATUS schannel_openssl_decrypt_message(SCHANNEL_OPENSSL* context, PSec pMessage->pBuffers[0].cbBuffer = 5; pMessage->pBuffers[1].BufferType = SECBUFFER_DATA; pMessage->pBuffers[1].pvBuffer = buffer; - pMessage->pBuffers[1].cbBuffer = length; + pMessage->pBuffers[1].cbBuffer = WINPR_ASSERTING_INT_CAST(uint32_t, length); pMessage->pBuffers[2].BufferType = SECBUFFER_STREAM_TRAILER; pMessage->pBuffers[2].cbBuffer = 36; pMessage->pBuffers[3].BufferType = SECBUFFER_EMPTY; diff --git a/winpr/libwinpr/sspi/sspi.c b/winpr/libwinpr/sspi/sspi.c index f57d70156..b72d21af9 100644 --- a/winpr/libwinpr/sspi/sspi.c +++ b/winpr/libwinpr/sspi/sspi.c @@ -457,7 +457,7 @@ const char* GetSecurityStatusString(SECURITY_STATUS status) break; } - return NtStatus2Tag((DWORD)status); + return NtStatus2Tag(status); } BOOL IsSecurityStatusError(SECURITY_STATUS status) diff --git a/winpr/libwinpr/sspi/sspi_gss.c b/winpr/libwinpr/sspi/sspi_gss.c index 7dfe6a7e5..26c3927dc 100644 --- a/winpr/libwinpr/sspi/sspi_gss.c +++ b/winpr/libwinpr/sspi/sspi_gss.c @@ -111,7 +111,7 @@ BOOL sspi_gss_unwrap_token(const SecBuffer* buf, WinPrAsn1_OID* oid, uint16_t* t return FALSE; if (tok_id) - Stream_Read_INT16_BE(s, *tok_id); + Stream_Read_UINT16_BE(s, *tok_id); token->data = Stream_Pointer(s); token->length = (UINT)Stream_GetRemainingLength(s); diff --git a/winpr/libwinpr/sspi/sspi_winpr.c b/winpr/libwinpr/sspi/sspi_winpr.c index 8d6df3510..88751eb8a 100644 --- a/winpr/libwinpr/sspi/sspi_winpr.c +++ b/winpr/libwinpr/sspi/sspi_winpr.c @@ -357,7 +357,7 @@ int sspi_SetAuthIdentityWithLengthW(SEC_WINNT_AUTH_IDENTITY* identity, const WCH { WINPR_ASSERT(identity); sspi_FreeAuthIdentity(identity); - identity->Flags &= ~SEC_WINNT_AUTH_IDENTITY_ANSI; + identity->Flags &= (uint32_t)~SEC_WINNT_AUTH_IDENTITY_ANSI; identity->Flags |= SEC_WINNT_AUTH_IDENTITY_UNICODE; if (!copy(&identity->User, &identity->UserLength, user, userLen)) @@ -882,7 +882,7 @@ int sspi_CopyAuthIdentity(SEC_WINNT_AUTH_IDENTITY* identity, if (status <= 0) return -1; - identity->Flags &= ~SEC_WINNT_AUTH_IDENTITY_ANSI; + identity->Flags &= (uint32_t)~SEC_WINNT_AUTH_IDENTITY_ANSI; identity->Flags |= SEC_WINNT_AUTH_IDENTITY_UNICODE; return 1; } diff --git a/winpr/libwinpr/sspicli/sspicli.c b/winpr/libwinpr/sspicli/sspicli.c index dd78127cc..b1a3f0c61 100644 --- a/winpr/libwinpr/sspicli/sspicli.c +++ b/winpr/libwinpr/sspicli/sspicli.c @@ -163,7 +163,8 @@ BOOL LogonUserA(LPCSTR lpszUsername, LPCSTR lpszDomain, LPCSTR lpszPassword, DWO struct passwd pwd = { 0 }; struct passwd* pw = NULL; - const int rc = getpwnam_r(lpszUsername, &pwd, buf, buflen, &pw); + const int rc = + getpwnam_r(lpszUsername, &pwd, buf, WINPR_ASSERTING_INT_CAST(size_t, buflen), &pw); free(buf); if ((rc == 0) && pw) { diff --git a/winpr/libwinpr/sysinfo/sysinfo.c b/winpr/libwinpr/sysinfo/sysinfo.c index f75047f36..40ec3d797 100644 --- a/winpr/libwinpr/sysinfo/sysinfo.c +++ b/winpr/libwinpr/sysinfo/sysinfo.c @@ -447,7 +447,7 @@ BOOL GetComputerNameA(LPSTR lpBuffer, LPDWORD lpnSize) size_t length = strnlen(hostname, MAX_COMPUTERNAME_LENGTH); const char* dot = strchr(hostname, '.'); if (dot) - length = (dot - hostname); + length = WINPR_ASSERTING_INT_CAST(size_t, (dot - hostname)); if ((*lpnSize <= (DWORD)length) || !lpBuffer) { @@ -577,7 +577,8 @@ UINT64 winpr_GetTickCount64NS(void) struct timespec ts = { 0 }; if (clock_gettime(CLOCK_MONOTONIC_RAW, &ts) == 0) - ticks = (ts.tv_sec * 1000000000ull) + ts.tv_nsec; + ticks = (WINPR_ASSERTING_INT_CAST(uint64_t, ts.tv_sec) * 1000000000ull) + + WINPR_ASSERTING_INT_CAST(uint64_t, ts.tv_nsec); #elif defined(__MACH__) && defined(__APPLE__) ticks = mac_get_time_ns(); #elif defined(_WIN32) @@ -630,7 +631,8 @@ UINT64 winpr_GetUnixTimeNS(void) struct timespec ts = { 0 }; if (clock_gettime(CLOCK_REALTIME, &ts) != 0) return 0; - return ts.tv_sec * 1000000000ull + ts.tv_nsec; + return WINPR_ASSERTING_INT_CAST(uint64_t, ts.tv_sec) * 1000000000ull + + WINPR_ASSERTING_INT_CAST(uint64_t, ts.tv_nsec); #else struct timeval tv = { 0 }; if (gettimeofday(&tv, NULL) != 0) diff --git a/winpr/libwinpr/thread/argv.c b/winpr/libwinpr/thread/argv.c index f219503e1..6f4d1318c 100644 --- a/winpr/libwinpr/thread/argv.c +++ b/winpr/libwinpr/thread/argv.c @@ -157,8 +157,8 @@ LPSTR* CommandLineToArgvA(LPCSTR lpCmdLine, int* pNumArgs) pBeg--; } - n = ((pEnd - pBeg) - 1); - length = (pBeg - pLastEnd); + n = WINPR_ASSERTING_INT_CAST(size_t, ((pEnd - pBeg) - 1)); + length = WINPR_ASSERTING_INT_CAST(size_t, (pBeg - pLastEnd)); CopyMemory(pOutput, p, length); pOutput += length; p += length; @@ -221,7 +221,7 @@ LPSTR* CommandLineToArgvA(LPCSTR lpCmdLine, int* pNumArgs) if (*p != '"') { /* no whitespace escaped with double quotes */ - length = (p - pBeg); + length = WINPR_ASSERTING_INT_CAST(size_t, (p - pBeg)); CopyMemory(pOutput, pBeg, length); pOutput[length] = '\0'; pArgs[numArgs++] = pOutput; diff --git a/winpr/libwinpr/utils/asn1/asn1.c b/winpr/libwinpr/utils/asn1/asn1.c index 0805ff4a4..a5b34c73c 100644 --- a/winpr/libwinpr/utils/asn1/asn1.c +++ b/winpr/libwinpr/utils/asn1/asn1.c @@ -1168,13 +1168,13 @@ static int read2digits(wStream* s) int ret = 0; char c = 0; - Stream_Read_UINT8(s, c); + Stream_Read_INT8(s, c); if (c < '0' || c > '9') return -1; ret = (c - '0') * 10; - Stream_Read_UINT8(s, c); + Stream_Read_INT8(s, c); if (c < '0' || c > '9') return -1; @@ -1203,38 +1203,38 @@ size_t WinPrAsn1DecReadUtcTime(WinPrAsn1Decoder* dec, WinPrAsn1_UTCTIME* target) Stream_StaticConstInit(s, Stream_ConstPointer(&dec->source), len); v = read2digits(s); - if (v <= 0) + if ((v <= 0) || (v >= UINT16_MAX - 2000)) return 0; - target->year = 2000 + v; + target->year = (UINT16)(2000 + v); v = read2digits(s); - if (v <= 0) + if ((v <= 0) || (v > UINT8_MAX)) return 0; - target->month = v; + target->month = (UINT8)v; v = read2digits(s); - if (v <= 0) + if ((v <= 0) || (v > UINT8_MAX)) return 0; - target->day = v; + target->day = (UINT8)v; v = read2digits(s); - if (v <= 0) + if ((v <= 0) || (v > UINT8_MAX)) return 0; - target->hour = v; + target->hour = (UINT8)v; v = read2digits(s); - if (v <= 0) + if ((v <= 0) || (v > UINT8_MAX)) return 0; - target->minute = v; + target->minute = (UINT8)v; v = read2digits(s); - if (v <= 0) + if ((v <= 0) || (v > UINT8_MAX)) return 0; - target->second = v; + target->second = (UINT8)v; if (Stream_GetRemainingLength(s) >= 1) { - Stream_Read_UINT8(s, target->tz); + Stream_Read_INT8(s, target->tz); } Stream_Seek(&dec->source, len); diff --git a/winpr/libwinpr/utils/cmdline.c b/winpr/libwinpr/utils/cmdline.c index 4b6e92dad..99d439189 100644 --- a/winpr/libwinpr/utils/cmdline.c +++ b/winpr/libwinpr/utils/cmdline.c @@ -196,7 +196,7 @@ int CommandLineParseArgumentsA(int argc, LPSTR* argv, COMMAND_LINE_ARGUMENT_A* o { SSIZE_T separator_index = (separator - argv[i]); SSIZE_T value_index = separator_index + 1; - keyword_length = (separator - keyword); + keyword_length = WINPR_ASSERTING_INT_CAST(size_t, (separator - keyword)); value = &argv[i][value_index]; } else @@ -818,7 +818,7 @@ char* CommandLineToCommaSeparatedValuesEx(int argc, char* argv[], const char* fi { char* str = NULL; size_t offset = 0; - size_t size = argc + 1; + size_t size = WINPR_ASSERTING_INT_CAST(size_t, argc) + 1; if ((argc <= 0) || !argv) return NULL; diff --git a/winpr/libwinpr/utils/collections/ArrayList.c b/winpr/libwinpr/utils/collections/ArrayList.c index afbd6af05..63dc3aa4f 100644 --- a/winpr/libwinpr/utils/collections/ArrayList.c +++ b/winpr/libwinpr/utils/collections/ArrayList.c @@ -236,15 +236,16 @@ static BOOL ArrayList_Shift(wArrayList* arrayList, size_t index, SSIZE_T count) } else if (count < 0) { - const size_t off = index + (size_t)(-1 * count); + const size_t scount = WINPR_ASSERTING_INT_CAST(size_t, -count); + const size_t off = index + scount; if (off < arrayList->size) { const size_t chunk = arrayList->size - off; - MoveMemory((void*)&arrayList->array[index], (void*)&arrayList->array[index - count], + MoveMemory((void*)&arrayList->array[index], (void*)&arrayList->array[off], chunk * sizeof(void*)); } - arrayList->size += count; + arrayList->size -= scount; } return TRUE; diff --git a/winpr/libwinpr/utils/collections/BufferPool.c b/winpr/libwinpr/utils/collections/BufferPool.c index 1ef129730..de6682ad1 100644 --- a/winpr/libwinpr/utils/collections/BufferPool.c +++ b/winpr/libwinpr/utils/collections/BufferPool.c @@ -23,6 +23,8 @@ #include +#define MAX(a, b) ((a) > (b)) ? (a) : (b) + typedef struct { SSIZE_T size; @@ -85,28 +87,35 @@ static BOOL BufferPool_ShiftAvailable(wBufferPool* pool, size_t index, int count if (pool->aSize + count > pool->aCapacity) { wBufferPoolItem* newArray = NULL; - SSIZE_T newCapacity = pool->aCapacity * 2; + SSIZE_T newCapacity = pool->aSize + count; + newCapacity += (newCapacity + 2) / 2; + WINPR_ASSERT(newCapacity > 0); if (pool->alignment > 0) newArray = (wBufferPoolItem*)winpr_aligned_realloc( - pool->aArray, sizeof(wBufferPoolItem) * newCapacity, pool->alignment); + pool->aArray, + sizeof(wBufferPoolItem) * WINPR_ASSERTING_INT_CAST(size_t, newCapacity), + pool->alignment); else - newArray = - (wBufferPoolItem*)realloc(pool->aArray, sizeof(wBufferPoolItem) * newCapacity); + newArray = (wBufferPoolItem*)realloc( + pool->aArray, + sizeof(wBufferPoolItem) * WINPR_ASSERTING_INT_CAST(size_t, newCapacity)); if (!newArray) return FALSE; pool->aArray = newArray; pool->aCapacity = newCapacity; } - MoveMemory(&pool->aArray[index + count], &pool->aArray[index], - (pool->aSize - index) * sizeof(wBufferPoolItem)); + MoveMemory( + &pool->aArray[index + WINPR_ASSERTING_INT_CAST(size_t, count)], &pool->aArray[index], + (WINPR_ASSERTING_INT_CAST(size_t, pool->aSize) - index) * sizeof(wBufferPoolItem)); pool->aSize += count; } else if (count < 0) { - MoveMemory(&pool->aArray[index], &pool->aArray[index - count], - (pool->aSize - index) * sizeof(wBufferPoolItem)); + MoveMemory( + &pool->aArray[index], &pool->aArray[index + WINPR_ASSERTING_INT_CAST(size_t, -count)], + (WINPR_ASSERTING_INT_CAST(size_t, pool->aSize) - index) * sizeof(wBufferPoolItem)); pool->aSize += count; } return TRUE; @@ -122,10 +131,13 @@ static BOOL BufferPool_ShiftUsed(wBufferPool* pool, SSIZE_T index, SSIZE_T count wBufferPoolItem* newUArray = NULL; if (pool->alignment > 0) newUArray = (wBufferPoolItem*)winpr_aligned_realloc( - pool->uArray, sizeof(wBufferPoolItem) * newUCapacity, pool->alignment); + pool->uArray, + sizeof(wBufferPoolItem) * WINPR_ASSERTING_INT_CAST(size_t, newUCapacity), + pool->alignment); else - newUArray = - (wBufferPoolItem*)realloc(pool->uArray, sizeof(wBufferPoolItem) * newUCapacity); + newUArray = (wBufferPoolItem*)realloc( + pool->uArray, + sizeof(wBufferPoolItem) * WINPR_ASSERTING_INT_CAST(size_t, newUCapacity)); if (!newUArray) return FALSE; pool->uCapacity = newUCapacity; @@ -133,13 +145,13 @@ static BOOL BufferPool_ShiftUsed(wBufferPool* pool, SSIZE_T index, SSIZE_T count } MoveMemory(&pool->uArray[index + count], &pool->uArray[index], - (pool->uSize - index) * sizeof(wBufferPoolItem)); + WINPR_ASSERTING_INT_CAST(size_t, pool->uSize - index) * sizeof(wBufferPoolItem)); pool->uSize += count; } else if (count < 0) { MoveMemory(&pool->uArray[index], &pool->uArray[index - count], - (pool->uSize - index) * sizeof(wBufferPoolItem)); + WINPR_ASSERTING_INT_CAST(size_t, pool->uSize - index) * sizeof(wBufferPoolItem)); pool->uSize += count; } return TRUE; @@ -232,9 +244,10 @@ void* BufferPool_Take(wBufferPool* pool, SSIZE_T size) if (!buffer) { if (pool->alignment) - buffer = winpr_aligned_malloc(pool->fixedSize, pool->alignment); + buffer = winpr_aligned_malloc(WINPR_ASSERTING_INT_CAST(size_t, pool->fixedSize), + pool->alignment); else - buffer = malloc(pool->fixedSize); + buffer = malloc(WINPR_ASSERTING_INT_CAST(size_t, pool->fixedSize)); } if (!buffer) @@ -279,9 +292,10 @@ void* BufferPool_Take(wBufferPool* pool, SSIZE_T size) else { if (pool->alignment) - buffer = winpr_aligned_malloc(size, pool->alignment); + buffer = winpr_aligned_malloc(WINPR_ASSERTING_INT_CAST(size_t, size), + pool->alignment); else - buffer = malloc(size); + buffer = malloc(WINPR_ASSERTING_INT_CAST(size_t, size)); if (!buffer) goto out_error; @@ -295,9 +309,10 @@ void* BufferPool_Take(wBufferPool* pool, SSIZE_T size) { void* newBuffer = NULL; if (pool->alignment) - newBuffer = winpr_aligned_realloc(buffer, size, pool->alignment); + newBuffer = winpr_aligned_realloc( + buffer, WINPR_ASSERTING_INT_CAST(size_t, size), pool->alignment); else - newBuffer = realloc(buffer, size); + newBuffer = realloc(buffer, WINPR_ASSERTING_INT_CAST(size_t, size)); if (!newBuffer) goto out_error_no_free; @@ -305,7 +320,7 @@ void* BufferPool_Take(wBufferPool* pool, SSIZE_T size) buffer = newBuffer; } - if (!BufferPool_ShiftAvailable(pool, foundIndex, -1)) + if (!BufferPool_ShiftAvailable(pool, WINPR_ASSERTING_INT_CAST(size_t, foundIndex), -1)) goto out_error; } @@ -314,7 +329,8 @@ void* BufferPool_Take(wBufferPool* pool, SSIZE_T size) if (pool->uSize + 1 > pool->uCapacity) { - size_t newUCapacity = pool->uCapacity * 2ULL; + size_t newUCapacity = WINPR_ASSERTING_INT_CAST(size_t, pool->uCapacity); + newUCapacity += (newUCapacity + 2) / 2; if (newUCapacity > SSIZE_MAX) goto out_error; wBufferPoolItem* newUArray = @@ -363,8 +379,9 @@ BOOL BufferPool_Return(wBufferPool* pool, void* buffer) if ((pool->size + 1) >= pool->capacity) { - SSIZE_T newCapacity = pool->capacity * 2; - void** newArray = (void**)realloc((void*)pool->array, sizeof(void*) * newCapacity); + SSIZE_T newCapacity = MAX(1, pool->size + (pool->size + 2) / 2 + 1); + void** newArray = (void**)realloc( + (void*)pool->array, sizeof(void*) * WINPR_ASSERTING_INT_CAST(size_t, newCapacity)); if (!newArray) goto out_error; @@ -399,9 +416,10 @@ BOOL BufferPool_Return(wBufferPool* pool, void* buffer) { if ((pool->aSize + 1) >= pool->aCapacity) { - SSIZE_T newCapacity = pool->aCapacity * 2; - wBufferPoolItem* newArray = - (wBufferPoolItem*)realloc(pool->aArray, sizeof(wBufferPoolItem) * newCapacity); + SSIZE_T newCapacity = MAX(1, pool->aSize + (pool->aSize + 2) / 2 + 1); + wBufferPoolItem* newArray = (wBufferPoolItem*)realloc( + pool->aArray, + sizeof(wBufferPoolItem) * WINPR_ASSERTING_INT_CAST(size_t, newCapacity)); if (!newArray) goto out_error; @@ -500,7 +518,8 @@ wBufferPool* BufferPool_New(BOOL synchronized, SSIZE_T fixedSize, DWORD alignmen pool->size = 0; pool->capacity = 32; - pool->array = (void**)calloc(pool->capacity, sizeof(void*)); + pool->array = + (void**)calloc(WINPR_ASSERTING_INT_CAST(size_t, pool->capacity), sizeof(void*)); if (!pool->array) goto out_error; } @@ -510,13 +529,15 @@ wBufferPool* BufferPool_New(BOOL synchronized, SSIZE_T fixedSize, DWORD alignmen pool->aSize = 0; pool->aCapacity = 32; - pool->aArray = (wBufferPoolItem*)calloc(pool->aCapacity, sizeof(wBufferPoolItem)); + pool->aArray = (wBufferPoolItem*)calloc( + WINPR_ASSERTING_INT_CAST(size_t, pool->aCapacity), sizeof(wBufferPoolItem)); if (!pool->aArray) goto out_error; pool->uSize = 0; pool->uCapacity = 32; - pool->uArray = (wBufferPoolItem*)calloc(pool->uCapacity, sizeof(wBufferPoolItem)); + pool->uArray = (wBufferPoolItem*)calloc( + WINPR_ASSERTING_INT_CAST(size_t, pool->uCapacity), sizeof(wBufferPoolItem)); if (!pool->uArray) goto out_error; } diff --git a/winpr/libwinpr/utils/collections/ListDictionary.c b/winpr/libwinpr/utils/collections/ListDictionary.c index cf238a9d3..95e8a8653 100644 --- a/winpr/libwinpr/utils/collections/ListDictionary.c +++ b/winpr/libwinpr/utils/collections/ListDictionary.c @@ -159,7 +159,7 @@ size_t ListDictionary_GetKeys(wListDictionary* listDictionary, ULONG_PTR** ppKey if (listDictionary->synchronized) LeaveCriticalSection(&listDictionary->lock); - return -1; + return 0; } } diff --git a/winpr/libwinpr/utils/image.c b/winpr/libwinpr/utils/image.c index 26278ee4a..a5cd1ef92 100644 --- a/winpr/libwinpr/utils/image.c +++ b/winpr/libwinpr/utils/image.c @@ -165,8 +165,9 @@ BOOL readBitmapInfoHeader(wStream* s, WINPR_BITMAP_INFO_HEADER* bi, size_t* poff } if (bi->biSizeImage == 0) { - UINT32 stride = ((((bi->biWidth * bi->biBitCount) + 31) & ~31) >> 3); - bi->biSizeImage = abs(bi->biHeight) * stride; + UINT32 stride = WINPR_ASSERTING_INT_CAST( + uint32_t, ((((bi->biWidth * bi->biBitCount) + 31) & ~31) >> 3)); + bi->biSizeImage = WINPR_ASSERTING_INT_CAST(uint32_t, abs(bi->biHeight)) * stride; } break; case BI_BITFIELDS: @@ -323,7 +324,7 @@ int winpr_bitmap_write_ex(const char* filename, const BYTE* data, size_t stride, FILE* fp = NULL; int ret = -1; void* bmpdata = NULL; - const size_t bpp_stride = ((((width * bpp) + 31) & ~31) >> 3); + const size_t bpp_stride = ((((width * bpp) + 31) & (size_t)~31) >> 3); if ((stride > UINT32_MAX) || (width > UINT32_MAX) || (height > UINT32_MAX) || (bpp > UINT32_MAX)) @@ -379,7 +380,7 @@ fail: int winpr_image_write(wImage* image, const char* filename) { WINPR_ASSERT(image); - return winpr_image_write_ex(image, image->type, filename); + return winpr_image_write_ex(image, WINPR_ASSERTING_INT_CAST(uint32_t, image->type), filename); } int winpr_image_write_ex(wImage* image, UINT32 format, const char* filename) @@ -458,14 +459,17 @@ static int winpr_image_bitmap_read_buffer(wImage* image, const BYTE* buffer, siz image->bitsPerPixel = bi.biBitCount; image->bytesPerPixel = (image->bitsPerPixel / 8UL); const size_t bpp = (bi.biBitCount + 7UL) / 8UL; - image->scanline = (UINT32)(bi.biWidth * bpp); + image->scanline = + WINPR_ASSERTING_INT_CAST(uint32_t, bi.biWidth) * WINPR_ASSERTING_INT_CAST(uint32_t, bpp); const size_t bmpsize = 1ULL * image->scanline * image->height; if (bmpsize != bi.biSizeImage) WLog_WARN(TAG, "bmpsize=%" PRIuz " != bi.biSizeImage=%" PRIu32, bmpsize, bi.biSizeImage); if (bi.biSizeImage < bmpsize) goto fail; - image->data = (BYTE*)malloc(bi.biSizeImage); + image->data = NULL; + if (bi.biSizeImage > 0) + image->data = (BYTE*)malloc(bi.biSizeImage); if (!image->data) goto fail; diff --git a/winpr/libwinpr/utils/print.c b/winpr/libwinpr/utils/print.c index 7005a97fd..84bf937dc 100644 --- a/winpr/libwinpr/utils/print.c +++ b/winpr/libwinpr/utils/print.c @@ -176,11 +176,11 @@ fail: static BYTE value(char c) { if ((c >= '0') && (c <= '9')) - return c - '0'; + return (c - '0') & 0xFF; if ((c >= 'A') && (c <= 'F')) - return 10 + c - 'A'; + return (10 + c - 'A') & 0xFF; if ((c >= 'a') && (c <= 'f')) - return 10 + c - 'a'; + return (10 + c - 'a') & 0xFF; return 0; } diff --git a/winpr/libwinpr/utils/sam.c b/winpr/libwinpr/utils/sam.c index 825fb9258..eef08fe7a 100644 --- a/winpr/libwinpr/utils/sam.c +++ b/winpr/libwinpr/utils/sam.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -185,16 +186,13 @@ static void SamLookupFinish(WINPR_SAM* sam) static BOOL SamReadEntry(WINPR_SAM* sam, WINPR_SAM_ENTRY* entry) { - char* p[5]; - size_t LmHashLength = 0; - size_t NtHashLength = 0; + char* p[5] = { 0 }; size_t count = 0; - char* cur = NULL; if (!sam || !entry || !sam->line) return FALSE; - cur = sam->line; + char* cur = sam->line; while ((cur = strchr(cur, ':')) != NULL) { @@ -210,8 +208,8 @@ static BOOL SamReadEntry(WINPR_SAM* sam, WINPR_SAM_ENTRY* entry) p[2] = strchr(p[1], ':') + 1; p[3] = strchr(p[2], ':') + 1; p[4] = strchr(p[3], ':') + 1; - LmHashLength = (p[3] - p[2] - 1); - NtHashLength = (p[4] - p[3] - 1); + const size_t LmHashLength = WINPR_ASSERTING_INT_CAST(size_t, (p[3] - p[2] - 1)); + const size_t NtHashLength = WINPR_ASSERTING_INT_CAST(size_t, (p[4] - p[3] - 1)); if ((LmHashLength != 0) && (LmHashLength != 32)) return FALSE; diff --git a/winpr/libwinpr/utils/strlst.c b/winpr/libwinpr/utils/strlst.c index 3172a937c..44a213538 100644 --- a/winpr/libwinpr/utils/strlst.c +++ b/winpr/libwinpr/utils/strlst.c @@ -47,7 +47,7 @@ int string_list_length(const char** string_list) char** string_list_copy(const char** string_list) { int length = string_list_length(string_list); - char** copy = (char**)calloc(length + 1, sizeof(char*)); + char** copy = (char**)calloc(WINPR_ASSERTING_INT_CAST(size_t, length) + 1, sizeof(char*)); if (!copy) { diff --git a/winpr/libwinpr/utils/test/TestArrayList.c b/winpr/libwinpr/utils/test/TestArrayList.c index ad70f3243..c36dbfcf1 100644 --- a/winpr/libwinpr/utils/test/TestArrayList.c +++ b/winpr/libwinpr/utils/test/TestArrayList.c @@ -5,6 +5,7 @@ int TestArrayList(int argc, char* argv[]) { + int res = -1; SSIZE_T rc = 0; size_t val = 0; const size_t elemsToInsert = 10; @@ -19,7 +20,7 @@ int TestArrayList(int argc, char* argv[]) for (size_t index = 0; index < elemsToInsert; index++) { if (!ArrayList_Append(arrayList, (void*)index)) - return -1; + goto fail; } size_t count = ArrayList_Count(arrayList); @@ -31,7 +32,7 @@ int TestArrayList(int argc, char* argv[]) printf("ArrayList index: %" PRIdz "\n", index); if (index != 6) - return -1; + goto fail; ArrayList_Insert(arrayList, 5, (void*)(size_t)100); @@ -39,7 +40,7 @@ int TestArrayList(int argc, char* argv[]) printf("ArrayList index: %" PRIdz "\n", index); if (index != 7) - return -1; + goto fail; ArrayList_Remove(arrayList, (void*)(size_t)100); @@ -47,34 +48,37 @@ int TestArrayList(int argc, char* argv[]) printf("ArrayList index: %d\n", rc); if (rc != 6) - return -1; + goto fail; for (size_t index = 0; index < elemsToInsert; index++) { val = (size_t)ArrayList_GetItem(arrayList, 0); if (!ArrayList_RemoveAt(arrayList, 0)) - return -1; + goto fail; + if (val != index) { printf("ArrayList: shifted %" PRIdz " entries, expected value %" PRIdz ", got %" PRIdz "\n", index, index, val); - return -1; + goto fail; } } rc = ArrayList_IndexOf(arrayList, (void*)elemsToInsert, -1, -1); printf("ArrayList index: %d\n", rc); if (rc != -1) - return -1; + goto fail; count = ArrayList_Count(arrayList); printf("ArrayList count: %" PRIuz "\n", count); if (count != 0) - return -1; + goto fail; ArrayList_Clear(arrayList); + res = 0; +fail: ArrayList_Free(arrayList); - return 0; + return res; } diff --git a/winpr/libwinpr/utils/wlog/Layout.c b/winpr/libwinpr/utils/wlog/Layout.c index f94d8a453..31f4f0a8c 100644 --- a/winpr/libwinpr/utils/wlog/Layout.c +++ b/winpr/libwinpr/utils/wlog/Layout.c @@ -156,12 +156,12 @@ static const char* skip_if_null(const struct format_option* opt, const char* fmt const char* end = strstr(str, opt->replace); if (!end) return NULL; - *pskiplen = end - fmt + opt->replacelen; + *pskiplen = WINPR_ASSERTING_INT_CAST(size_t, end - fmt) + opt->replacelen; if (!opt->arg) return NULL; - const size_t replacelen = end - str; + const size_t replacelen = WINPR_ASSERTING_INT_CAST(size_t, end - str); char buffer[WLOG_MAX_PREFIX_SIZE] = { 0 }; memcpy(buffer, str, MIN(replacelen, ARRAYSIZE(buffer) - 1)); @@ -207,9 +207,10 @@ static BOOL replace_format_string(const char* FormatString, struct format_option WINPR_PRAGMA_DIAG_POP if (rc < 0) return FALSE; - if (!check_and_log_format_size(format, formatlen, index, rc)) + if (!check_and_log_format_size(format, formatlen, index, + WINPR_ASSERTING_INT_CAST(size_t, rc))) return FALSE; - index += rc; + index += WINPR_ASSERTING_INT_CAST(size_t, rc); } FormatString += fmtlen; } diff --git a/winpr/libwinpr/utils/wlog/UdpAppender.c b/winpr/libwinpr/utils/wlog/UdpAppender.c index 5b25926e5..17044f893 100644 --- a/winpr/libwinpr/utils/wlog/UdpAppender.c +++ b/winpr/libwinpr/utils/wlog/UdpAppender.c @@ -42,7 +42,6 @@ static BOOL WLog_UdpAppender_Open(wLog* log, wLogAppender* appender) struct addrinfo hints = { 0 }; struct addrinfo* result = { 0 }; int status = 0; - size_t addrLen = 0; char* colonPos = NULL; if (!appender) @@ -58,7 +57,7 @@ static BOOL WLog_UdpAppender_Open(wLog* log, wLogAppender* appender) if (!colonPos) return FALSE; - addrLen = (colonPos - udpAppender->host); + const size_t addrLen = WINPR_ASSERTING_INT_CAST(size_t, (colonPos - udpAppender->host)); memcpy(addressString, udpAppender->host, addrLen); addressString[addrLen] = '\0'; hints.ai_family = AF_INET; diff --git a/winpr/libwinpr/winsock/winsock.c b/winpr/libwinpr/winsock/winsock.c index c3f1aa1d8..d6c114baa 100644 --- a/winpr/libwinpr/winsock/winsock.c +++ b/winpr/libwinpr/winsock/winsock.c @@ -1005,12 +1005,11 @@ int WSAIoctl(SOCKET s, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuff SOCKET _accept(SOCKET s, struct sockaddr* addr, int* addrlen) { - int status = 0; - int fd = (int)s; + int fd = WINPR_ASSERTING_INT_CAST(int, s); socklen_t s_addrlen = (socklen_t)*addrlen; - status = accept(fd, addr, &s_addrlen); + const int status = accept(fd, addr, &s_addrlen); *addrlen = (int)s_addrlen; - return status; + return (SOCKET)status; } int _bind(SOCKET s, const struct sockaddr* addr, int namelen) @@ -1114,7 +1113,7 @@ u_short _htons(u_short hostshort) unsigned long _inet_addr(const char* cp) { - return (long)inet_addr(cp); + return WINPR_ASSERTING_INT_CAST(unsigned long, inet_addr(cp)); } char* _inet_ntoa(struct in_addr in) diff --git a/winpr/tools/makecert/makecert.c b/winpr/tools/makecert/makecert.c index 425822f55..ac3555d76 100644 --- a/winpr/tools/makecert/makecert.c +++ b/winpr/tools/makecert/makecert.c @@ -963,7 +963,7 @@ int makecert_context_process(MAKECERT_CONTEXT* context, int argc, char** argv) key_length = (int)val; } - if (!makecert_create_rsa(&context->pkey, key_length)) + if (!makecert_create_rsa(&context->pkey, WINPR_ASSERTING_INT_CAST(size_t, key_length))) return -1; X509_set_version(context->x509, 2);