From: Ken Takata <kentkt@...> Date: 2012-03-16T00:36:28+09:00 Subject: [ruby-dev:45368] [ruby-trunk - Bug #6144] regexec may allocate extra memory? Issue #6144 has been updated by Ken Takata. alloc_addr は、その後 OnigStackIndex* にキャストされて、OnigStackIndex の配列として使用されています。 OnigStackIndex は intptr_t の typedef ですので、xalloca で割り当てるサイズは合っています。 ただ、なぜわざわざ一度 char* 型の変数に代入しているのかはよく分かりません。 alloc_addr = (OnigStackIndex* )xalloca(sizeof(OnigStackIndex) * (ptr_num));\ とするのが最も分かりやすい気がしますが…。 ---------------------------------------- Bug #6144: regexec may allocate extra memory? https://bugs.ruby-lang.org/issues/6144#change-24610 Author: Yusuke Endoh Status: Assigned Priority: Normal Assignee: Yui NARUSE Category: Target version: ruby -v: ruby 2.0.0dev (2012-03-14 trunk 35017) [i686-linux] naruse さん、k-takata さん 遠藤です。 多分鬼車の問題なんですが、regexec.c に alloc_addr = (char* )xalloca(sizeof(char*) * (ptr_num));\ という行があります。(#define STACK_INIT 内) 前後見てませんが、 alloc_addr = (char* )xalloca(sizeof(char) * (ptr_num));\ または alloc_addr = (char** )xalloca(sizeof(char*) * (ptr_num));\ と書きたかったんじゃないでしょうか。 たぶん前者かなーという予感はしますが、確認・修正して頂けます でしょうか。もし現状が正しかったらすみません。 やはり Coverity Scan さんが見つけてくれてました。 -- Yusuke Endoh <mame@tsg.ne.jp> -- http://bugs.ruby-lang.org/