Fix wrong type of alterId in Clash VMess nodes (#325).
Fix broken parsing of ShadowsocksR subscription.
Fix possible crash when running scripts.
This commit is contained in:
Tindy X 2021-03-24 22:18:44 +08:00
parent b42bfec5f1
commit fe20b2d26c
No known key found for this signature in database
GPG Key ID: C6AD413169968D58
4 changed files with 20 additions and 26 deletions

View File

@ -358,7 +358,7 @@ void proxyToClash(std::vector<Proxy> &nodes, YAML::Node &yamlnode, const string_
case ProxyType::VMess: case ProxyType::VMess:
singleproxy["type"] = "vmess"; singleproxy["type"] = "vmess";
singleproxy["uuid"] = x.UserId; singleproxy["uuid"] = x.UserId;
singleproxy["alterId"] = x.AlterId; singleproxy["alterId"] = static_cast<uint32_t>(x.AlterId);
singleproxy["cipher"] = x.EncryptMethod; singleproxy["cipher"] = x.EncryptMethod;
singleproxy["tls"] = x.TLSSecure; singleproxy["tls"] = x.TLSSecure;
if(!scv.is_undef()) if(!scv.is_undef())

View File

@ -1526,15 +1526,12 @@ std::string subconverter(RESPONSE_CALLBACK_ARGS)
lExcludeRemarks = string_array{argExcludeRemark}; lExcludeRemarks = string_array{argExcludeRemark};
/// initialize script runtime /// initialize script runtime
if(authorized) if(authorized && !gScriptCleanContext)
{ {
ext.js_runtime = new qjs::Runtime(); ext.js_runtime = new qjs::Runtime();
script_runtime_init(*ext.js_runtime); script_runtime_init(*ext.js_runtime);
if(!gScriptCleanContext) ext.js_context = new qjs::Context(*ext.js_runtime);
{ script_context_init(*ext.js_context);
ext.js_context = new qjs::Context(*ext.js_runtime);
script_context_init(*ext.js_context);
}
} }
//start parsing urls //start parsing urls

View File

@ -560,7 +560,7 @@ void explodeSSR(std::string ssr, Proxy &node)
} }
else else
{ {
ssrConstruct(node, group, remarks, remarks_base64, server, port, protocol, method, obfs, password, obfsparam, protoparam); ssrConstruct(node, group, remarks, server, port, protocol, method, obfs, password, obfsparam, protoparam);
} }
} }

View File

@ -100,8 +100,8 @@ namespace qjs
JS_SetPropertyStr(ctx, obj, "ProxyInfo", JS_NewStringLen(ctx, n.proxyStr.c_str(), n.proxyStr.size())); JS_SetPropertyStr(ctx, obj, "ProxyInfo", JS_NewStringLen(ctx, n.proxyStr.c_str(), n.proxyStr.size()));
*/ */
JS_SetPropertyStr(ctx, obj, "Type", JS_NewInt32(ctx, n.Type)); JS_SetPropertyStr(ctx, obj, "Type", JS_NewInt32(ctx, n.Type));
JS_SetPropertyStr(ctx, obj, "ID", JS_NewInt32(ctx, n.Id)); JS_SetPropertyStr(ctx, obj, "Id", JS_NewInt32(ctx, n.Id));
JS_SetPropertyStr(ctx, obj, "GroupID", JS_NewInt32(ctx, n.GroupId)); JS_SetPropertyStr(ctx, obj, "GroupId", JS_NewInt32(ctx, n.GroupId));
JS_SetPropertyStr(ctx, obj, "Group", JS_NewStringLen(ctx, n.Group.c_str(), n.Group.size())); JS_SetPropertyStr(ctx, obj, "Group", JS_NewStringLen(ctx, n.Group.c_str(), n.Group.size()));
JS_SetPropertyStr(ctx, obj, "Remark", JS_NewStringLen(ctx, n.Remark.c_str(), n.Remark.size())); JS_SetPropertyStr(ctx, obj, "Remark", JS_NewStringLen(ctx, n.Remark.c_str(), n.Remark.size()));
JS_SetPropertyStr(ctx, obj, "Server", JS_NewStringLen(ctx, n.Hostname.c_str(), n.Hostname.size())); JS_SetPropertyStr(ctx, obj, "Server", JS_NewStringLen(ctx, n.Hostname.c_str(), n.Hostname.size()));
@ -150,8 +150,9 @@ namespace qjs
node.port = JS_GetPropertyToInt32(ctx, v, "Port"); node.port = JS_GetPropertyToInt32(ctx, v, "Port");
node.proxyStr = JS_GetPropertyToString(ctx, v, "ProxyInfo"); node.proxyStr = JS_GetPropertyToString(ctx, v, "ProxyInfo");
*/ */
node.Id = JS_GetPropertyToUInt32(ctx, v, "Id"); node.Type = JS_GetPropertyToInt32(ctx, v, "Type");
node.GroupId = JS_GetPropertyToUInt32(ctx, v, "GroupId"); node.Id = JS_GetPropertyToInt32(ctx, v, "Id");
node.GroupId = JS_GetPropertyToInt32(ctx, v, "GroupId");
node.Group = JS_GetPropertyToString(ctx, v, "Group"); node.Group = JS_GetPropertyToString(ctx, v, "Group");
node.Remark = JS_GetPropertyToString(ctx, v, "Remark"); node.Remark = JS_GetPropertyToString(ctx, v, "Remark");
node.Hostname = JS_GetPropertyToString(ctx, v, "Hostname"); node.Hostname = JS_GetPropertyToString(ctx, v, "Hostname");
@ -192,22 +193,18 @@ namespace qjs
template <typename Fn> template <typename Fn>
void script_safe_runner(qjs::Runtime *runtime, qjs::Context *context, Fn runnable, bool clean_context = false) void script_safe_runner(qjs::Runtime *runtime, qjs::Context *context, Fn runnable, bool clean_context = false)
{ {
if(runtime != nullptr) qjs::Runtime *internal_runtime = runtime;
qjs::Context *internal_context = context;
defer(if(clean_context) {delete internal_context; delete internal_runtime;} )
if(clean_context)
{ {
qjs::Context *internal_context = context; internal_runtime = new qjs::Runtime();
bool use_internal = false; script_runtime_init(*internal_runtime);
defer(if(use_internal && internal_context) delete internal_context;) internal_context = new qjs::Context(*internal_runtime);
if(clean_context) script_context_init(*internal_context);
{
internal_context = new qjs::Context(*runtime);
use_internal = true;
script_context_init(*internal_context);
}
if(internal_context != nullptr)
runnable(*internal_context);
if(clean_context)
delete internal_context;
} }
if(internal_runtime && internal_context)
runnable(*internal_context);
} }
#endif // SCRIPT_QUICKJS_H_INCLUDED #endif // SCRIPT_QUICKJS_H_INCLUDED