kousa****@nttda*****
kousa****@nttda*****
2008年 3月 14日 (金) 17:44:35 JST
幸坂です。こんにちは。 sen_index_info関数を使用する際に、 chunk_sizeを正常に計測できない問題が発生したため、 報告させて頂きます。 環境: RHEL 4 (32bit) kernel 2.6.9 gcc 3.4.6 Senna 1.1.2 1073483776 byte 394452.SEN.i.c 1073741824 byte 394452.SEN.i.c.001 1073741824 byte 394452.SEN.i.c.002 1073741824 byte 394452.SEN.i.c.003 1073741824 byte 394452.SEN.i.c.004 837812224 byte 394452.SEN.i.c.005 上記のchunkファイルが存在する状態で、 sen_index_info関数を用いて、chunkファイルサイズを計測すると、 4294709248 となります。(4つのファイルサイズの合計です。) ソースを覗いたところ、io.cの以下のあたりが気になります。 uint64_t tail = io->base + segment * segment_size + offset + size; if (tail > io->header->curr_size) { io->header->curr_size = tail; } segmentとsement_sizeはuint32_tで定義されているので、 segment*segment_sizeが4ギガ(uint32_tの上限)を超えると、 オーバーフローが発生すると思われます。 segmentをuint64_tでキャストする必要があると思われます。 以上です。