mirror of
git://source.winehq.org/git/wine.git
synced 2024-07-27 12:12:04 +00:00
jscript: Fix value arg leak in transform_json_object.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
This commit is contained in:
parent
aa18bbedea
commit
8f82586fd9
|
@ -295,7 +295,7 @@ static jsval_t transform_json_object(struct transform_json_object_ctx *proc_ctx,
|
|||
if(!obj) {
|
||||
FIXME("non-JS obj in JSON object: %p\n", get_object(args[1]));
|
||||
proc_ctx->hres = E_NOTIMPL;
|
||||
return jsval_undefined();
|
||||
goto ret;
|
||||
}else if(is_class(obj, JSCLASS_ARRAY)) {
|
||||
unsigned i, length = array_get_length(obj);
|
||||
WCHAR buf[14], *buf_end;
|
||||
|
@ -306,13 +306,13 @@ static jsval_t transform_json_object(struct transform_json_object_ctx *proc_ctx,
|
|||
str = idx_to_str(i, buf_end);
|
||||
if(!(jsstr = jsstr_alloc(str))) {
|
||||
proc_ctx->hres = E_OUTOFMEMORY;
|
||||
return jsval_undefined();
|
||||
goto ret;
|
||||
}
|
||||
res = transform_json_object(proc_ctx, obj, jsstr);
|
||||
jsstr_release(jsstr);
|
||||
if(is_undefined(res)) {
|
||||
if(FAILED(proc_ctx->hres))
|
||||
return jsval_undefined();
|
||||
goto ret;
|
||||
if(FAILED(jsdisp_get_id(obj, str, 0, &id)))
|
||||
continue;
|
||||
proc_ctx->hres = disp_delete((IDispatch*)&obj->IDispatchEx_iface, id, &b);
|
||||
|
@ -321,7 +321,7 @@ static jsval_t transform_json_object(struct transform_json_object_ctx *proc_ctx,
|
|||
jsval_release(res);
|
||||
}
|
||||
if(FAILED(proc_ctx->hres))
|
||||
return jsval_undefined();
|
||||
goto ret;
|
||||
}
|
||||
}else {
|
||||
id = DISPID_STARTENUM;
|
||||
|
@ -330,7 +330,7 @@ static jsval_t transform_json_object(struct transform_json_object_ctx *proc_ctx,
|
|||
if(proc_ctx->hres == S_FALSE)
|
||||
break;
|
||||
if(FAILED(proc_ctx->hres) || FAILED(proc_ctx->hres = jsdisp_get_prop_name(obj, id, &jsstr)))
|
||||
return jsval_undefined();
|
||||
goto ret;
|
||||
res = transform_json_object(proc_ctx, obj, jsstr);
|
||||
if(is_undefined(res)) {
|
||||
if(SUCCEEDED(proc_ctx->hres))
|
||||
|
@ -344,7 +344,7 @@ static jsval_t transform_json_object(struct transform_json_object_ctx *proc_ctx,
|
|||
}
|
||||
jsstr_release(jsstr);
|
||||
if(FAILED(proc_ctx->hres))
|
||||
return jsval_undefined();
|
||||
goto ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -352,6 +352,8 @@ static jsval_t transform_json_object(struct transform_json_object_ctx *proc_ctx,
|
|||
args[0] = jsval_string(name);
|
||||
proc_ctx->hres = disp_call_value(proc_ctx->ctx, proc_ctx->reviver, jsval_obj(holder),
|
||||
DISPATCH_METHOD, ARRAY_SIZE(args), args, &res);
|
||||
ret:
|
||||
jsval_release(args[1]);
|
||||
return FAILED(proc_ctx->hres) ? jsval_undefined() : res;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue