[ruby-trunk - Bug #6144][Open] regexec may allocate extra memory?

Issue #6144 has been reported by Yusuke E…


Bug #6144: regexec may allocate extra memory?
https://bugs.ruby-lang.org/issues/6144

Author: Yusuke E.
Status: Open
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 E. [email protected]

Issue #6144 has been updated by Yui NARUSE.

Status changed from Open to Assigned

うーん、何か変えるとしたら、以下のような感じですかねぇ。

diff --git a/regexec.c b/regexec.c
index 2587cd9…9e31c71 100644
— a/regexec.c
+++ b/regexec.c
@@ -446,16 +446,16 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)

#define STACK_INIT(alloc_addr, ptr_num, stack_num) do {
if (msa->stack_p) {\

  • alloc_addr = (char* )xalloca(sizeof(char*) * (ptr_num));\
  • alloc_addr = (char* )xalloca(sizeof(OnigStackIndex*) * (ptr_num));
    stk_alloc = (OnigStackType* )(msa->stack_p);
    stk_base = stk_alloc;
    stk = stk_base;
    stk_end = stk_base + msa->stack_n;
    }
    else {\
  • alloc_addr = (char* )xalloca(sizeof(char*) * (ptr_num)\
  • alloc_addr = (char* )xalloca(sizeof(OnigStackIndex*) * (ptr_num)
    + sizeof(OnigStackType) * (stack_num));\
  • stk_alloc = (OnigStackType* )(alloc_addr + sizeof(char*) *
    (ptr_num));\
  • stk_alloc = (OnigStackType* )(alloc_addr + sizeof(OnigStackIndex*)
  • (ptr_num));
    stk_base = stk_alloc;
    stk = stk_base;
    stk_end = stk_base + (stack_num);\

Bug #6144: regexec may allocate extra memory?
https://bugs.ruby-lang.org/issues/6144#change-24608

Author: Yusuke E.
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 E. [email protected]

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 E.
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 E. [email protected]

Issue #6144 has been updated by Ken Takata.

ただ、なぜわざわざ一度 char* 型の変数に代入しているのかはよく分かりません。
あ、stk_alloc の計算のために char* 型でなければならないのを見落としていました。


Bug #6144: regexec may allocate extra memory?
https://bugs.ruby-lang.org/issues/6144#change-24611

Author: Yusuke E.
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 E. [email protected]

Issue #6144 has been updated by k_takata (Ken Takata).

sizeof(char*)をsizeof(OnigStackIndex)に修正しました。

https://github.com/k-takata/Onigmo/tree/tmp/ruby-2.0.x

Bug #6144: regexec may allocate extra memory?
https://bugs.ruby-lang.org/issues/6144#change-24975

Author: mame (Yusuke E.)
Status: Assigned
Priority: Normal
Assignee: naruse (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 E. [email protected]

Issue #6144 has been updated by naruse (Yui NARUSE).

Status changed from Assigned to Closed


Bug #6144: regexec may allocate extra memory?
https://bugs.ruby-lang.org/issues/6144#change-25030

Author: mame (Yusuke E.)
Status: Closed
Priority: Normal
Assignee: naruse (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 E. [email protected]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs