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/