示例1
下面的代码调用了getUsername()函数,但在取消给出之前没有检查返回值(这可能会导致NullPoInterException)。
字符串用户名= getUsername();
if(username.equals(admin_user)){
...
}
示例2
此示例从用户获取IP地址,验证其形成良好,然后查找主机名并将其复制到缓冲区中。
void host_lookup(char *user_supplied_addr){
struct hostent *hp;
in_addr_t *addr;
char主机名[64];
in_addr_t inet_addr(const char *cp);
/ *确保user_supplied_addr的例程以适当的格式用于转换 */
validate_addr_form(user_supplied_addr);
addr = inet_addr(user_supplied_addr);
hp = gethostbyaddr(addr,sizeof(struct in_addr),af_inet);
strcpy(主机名,hp-> h_name);
}
如果攻击者提供了一个似乎已良好的地址,但地址无法解答到主机名,则呼叫GethostbyAddr()将返回null。由于代码未从GethostbyAddr检查返回值(CWE-252),无效的指针解除(CWE-476)然后在呼叫strcpy()中发生。
请注意,此代码也容易受到缓冲区溢出(CWE-119)。