|
@@ -4325,6 +4325,12 @@ BUILDIN_FUNC(return)
|
|
|
if( name[0] == '.' && name[1] == '@') {
|
|
|
// '@ 変数を参照渡しにすると危険なので値渡しにする
|
|
|
get_val(st,sd);
|
|
|
+ //Fix dangling pointer crash due when returning a temporary
|
|
|
+ // script variable (from Rayce/jA)
|
|
|
+ if(isstr(sd)) {
|
|
|
+ sd->type = C_STR;
|
|
|
+ sd->u.str = (char *)aStrdup(sd->u.str);
|
|
|
+ }
|
|
|
} else if( name[0] == '.' && !sd->ref) {
|
|
|
// ' 変数は参照渡しでも良いが、参照元が設定されていないと
|
|
|
// 元のスクリプトの値を差してしまうので補正する。
|