6. 6 /21
? サンプルコード
? 参考URL
? https://www.jpcert.or.jp/sc-rules/c-exp34-c.html
struct Person {
int age;
int height;
int weight;
};
int get_age(struct Person *who) {
return who->age;
}
int null_pointer_interproc() {
struct Person *joe = 0;
return get_age(joe);
}
17. 17 /21
? バグ内容
arg->dataがNULLになる可能性がある。
apps/apps.c:394: error: NULL_DEREFERENCE
pointer `arg->data` last assigned on line 391 could be null and is dereferenced at line
394, column 3
391. arg->data=(char **)OPENSSL_malloc(sizeof(char *)*arg->count);
392. }
393. for (i=0; i<arg->count; i++)
394. > arg->data[i]=NULL; //arg->dataがNULLになる可能性がある。
395.
396. num=0;
? 修正内容
NULLチェック追加
if (arg->data == NULL)
return 0;
18. 18 /21
? バグ内容
flagがNULLになる可能性がある。
ssl/d1_both.c:1164: error: NULL_DEREFERENCE
pointer `frag` last assigned on line 1162 could be null and is dereferenced at line 1164,
column 9
1162. frag = dtls1_hm_fragment_new(s->init_num, 0);
1163.
1164. > memcpy(frag->fragment, s->init_buf->data, s->init_num);
1165.
1166. if ( is_ccs)
? 修正内容
NULLチェック追加。
frag = dtls1_hm_fragment_new(s->init_num, 0);
if (!frag) return 0;
memcpy(frag->fragment, s->init_buf->data, s->init_num);
19. 19 /21
? バグ内容
bufferがNULLになる可能性がある。
crypto/bio/b_print.c:718: error: NULL_DEREFERENCE
pointer `*buffer` last assigned on line 715 could be null and is dereferenced by call to
`memcpy()` at line 718, column 21
715. *buffer = OPENSSL_malloc(*maxlen);
716. if (*currlen > 0) {
717. assert(*sbuffer != NULL);
718. > memcpy(*buffer, *sbuffer, *currlen);
719. }
720. *sbuffer = NULL;
? 修正内容
NULLチェック追加。
*buffer = OPENSSL_malloc(*maxlen);
if (*buffer == NULL) return 0;
20. 20 /21
? バグ内容
tmpがNULLになる可能性がある。
apps/ca.c:2782: error: NULL_DEREFERENCE
pointer `tmp` last assigned on line 2780 could be null and is dereferenced by call to
`strchr()` at line 2782, column 9
2780. tmp = BUF_strdup(str);
2781.
2782. > p = strchr(tmp, ',');
2783.
2784. rtime_str = tmp;
? 修正内容
NULLチェック追加。
if (!tmp) {
BIO_printf(bio_err, "memory allocation failuren");
goto err;
}