[Senna-dev 812] sen_index_info関数(4Gbyte)

アーカイブの一覧に戻る

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でキャストする必要があると思われます。

以上です。




Senna-dev メーリングリストの案内
アーカイブの一覧に戻る