[355] crowbar MEMモジュール
投稿者:tos
2007/02/20 02:13:25
皆さんこんにちは、tosです。
crowbarのMEMモジュールに関して質問があります。
memory.cの
void
set_header(Header *header, int size, char *filename, int line)
{
.
.
.
memset(header->s.mark, MARK, (char*)&header[1] - (char*)header->s.mark);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
でmemsetのサイズとしてMARK_SIZEでは無く、上記のようなサイズを設定しているのは、
パディングを考慮してのことなのかなと思いますが、
void
check_mark_sub(unsigned char *mark)
{
int i;
for (i = 0; i < MARK_SIZE; i++) {
if (mark[i] != MARK) {
fprintf(stderr, "bad mark\n");
abort();
}
}
}
でチェックしているのは、MARK_SIZEのようです。
これだと、(char*)&header[1] - (char*)header->s.mark)がMARK_SIZEでは無かった場合、
チェック漏れが起きてしまいそうな気がするのですが、あっていますでしょうか?(ヨワヨワです)