RT-ThreadプロジェクトでPVS-Studioコードアナライザーを使用して見つけた最も単純で面白いエラーのいくつか。
RT-Threadは中国のオープンソースIoTオペレーティングシステムであり、強力なスケーラビリティを備えています。たとえば、ARM Cortex-M0、Cortex-M3 / 4/7などの小さなコアで実行される小さなカーネルから、実行される豊富な機能システムまで、 MIPS32、ARM Cortex-A8、ARM Cortex-A9 DualCoreなど
github.com/RT-Thread/rt-threadPVS-Studioの警告:
V560 CWE-571条件式の一部は常に真です:0xFFFF0000。 peci.c 372
V560 CWE-571条件式の一部は常に真です:0x0000FFFF。 peci.c 373
#define PECI_M0D0C_HITHR_M 0xFFFF0000
&&の代わりに、&を記述する必要があります。
PVS-Studio警告:
V767ループ内の定数インデックスによる「w」配列の要素への疑わしいアクセス。 fsl_dcp.c 946
typedef union _dcp_hash_block { uint32_t w[DCP_HASH_BLOCK_SIZE / 4]; uint8_t b[DCP_HASH_BLOCK_SIZE]; } dcp_hash_block_t; typedef struct _dcp_hash_ctx_internal { dcp_hash_block_t blk; .... } dcp_hash_ctx_internal_t; status_t DCP_HASH_Init(DCP_Type *base, dcp_handle_t *handle, dcp_hash_ctx_t *ctx, dcp_hash_algo_t algo) { .... dcp_hash_ctx_internal_t *ctxInternal; .... for (i = 0; i < sizeof(ctxInternal->blk.w) / sizeof(ctxInternal->blk.w[0]); i++) { ctxInternal->blk.w[0] = 0u; } .... }
配列内の同じセルに0を書き込みます。 ほとんどの配列は初期化されません。 それは書かれるべきです:
ctxInternal-> blk.w [i] = 0u;
PVS-Studioの警告:
V602 CWE-480「(1U <1)」式の検査を検討してください。 「<」は、おそらく「<<」に置き換える必要があります。 fsl_aipstz.h 69
V602 CWE-480「(1U <2)」式の検査を検討してください。 「<」は、おそらく「<<」に置き換える必要があります。 fsl_aipstz.h 70
V602 CWE-480「(1U <2)」式の検査を検討してください。 「<」は、おそらく「<<」に置き換える必要があります。 fsl_aipstz.h 71
typedef enum _aipstz_peripheral_access_control { kAIPSTZ_PeripheralAllowUntrustedMaster = 1U, kAIPSTZ_PeripheralWriteProtected = (1U < 1), kAIPSTZ_PeripheralRequireSupervisor = (1U < 2), kAIPSTZ_PeripheralAllowBufferedWrite = (1U < 2) } aipstz_peripheral_access_control_t;
<の代わりに<<を使用する必要があります。 その後、定数は異なる次数の2に等しくなります。