我正在使用C-覆盖率警告修复程序。 TAINTED_SCALAR警告的新增内容。 我在下面的代码中收到了污染的标量警告,
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
ConstraintLayout parent = (ConstraintLayout) holder.title.getParent();
parent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Clicked recycler view item at position " + position, Toast.LENGTH_SHORT).show();
}
});
}
我已经包含了for循环,以检查接收到的radiusPkt是否不为NULL,直到复制“ pktLen”字段值所需的长度为止。这是行不通的,而是引发了另一条警告,即死代码。在代码中对此进行了解释。
预计TAINTED_SCALAR警告为0。但是由于此问题,收到的TAINTED_SCALAR警告为1。
有人可以帮我摆脱这个TAINTED_SCALAR警告吗?
答案 0 :(得分:0)
下面的代码更改解决了该问题并给出了预期的结果。
VOID func1 (UINT1 *p_u1RadiusReceivedPacket,
UINT1 *p_u1Secret,
UINT1 a_u1Concatenated[],
INT4 *i4_Length)
{
INT4 i4_seclen = 0;
UINT2 u2_pktlen = 0;
UINT1 a_u1RequestAuth[LEN_REQ_AUTH_AUTH] = {};
INT4 index = 0;
if (p_u1RadiusReceivedPacket == NULL)
{
return;
}
MEMSET (a_u1Concatenated, 0, LEN_RX_PKT + LEN_SECRET);
MEMCPY (&u2_pktlen, p_u1RadiusReceivedPacket + PKT_LEN, 2);
u2_pktlen = OSIX_NTOHS (u2_pktlen);
/* Validate the packet length to avoid buffer overflow, denial of service,
* memory corruption, or other security vulnerability. */
if ((u2_pktlen < 20) || (u2_pktlen > 4096))
{
return;
}
MEMCPY (a_u1Concatenated, p_u1RadiusReceivedPacket, u2_pktlen);
MEMCPY (a_u1RequestAuth, p_u1RadiusReceivedPacket + PKT_REQA,
LEN_REQ_AUTH_AUTH);
MEMCPY (a_u1Concatenated + PKT_REQA,
a_u1RequestAuth, LEN_REQ_AUTH_AUTH);
i4_seclen = STRLEN ((char *) p_u1Secret);
MEMCPY (a_u1Concatenated + u2_pktlen, p_u1Secret, i4_seclen);
*i4_Length = u2_pktlen + i4_seclen;
}