1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2026-01-02 08:33:20 +00:00

Fixed bug where Console/Temp mode Agent could corrupt TLS on remote Input

This commit is contained in:
Bryan Roe
2021-01-25 14:47:01 -08:00
parent b8c4df02a7
commit bc4c8aa41b

View File

@@ -789,11 +789,37 @@ void ILibDuktape_MeshAgent_Ready(ILibDuktape_EventEmitter *sender, char *eventNa
duk_pop(sender->ctx); // ...
}
#ifdef _LINKVM
#ifdef WIN32
void ILibDuktape_MeshAgent_RemoteDesktop_KVM_WriteSink_Chain(void *chain, void *user)
{
RemoteDesktop_Ptrs *ptrs = (RemoteDesktop_Ptrs*)((void**)ILibMemory_Extra(user))[0];
char *buffer = (char*)user;
size_t bufferLen = ILibMemory_Size(user);
ILibDuktape_DuplexStream_WriteData(ptrs->stream, buffer, bufferLen);
ILibMemory_Free(user);
}
#endif
ILibTransport_DoneState ILibDuktape_MeshAgent_RemoteDesktop_KVM_WriteSink(char *buffer, int bufferLen, void *reserved)
{
RemoteDesktop_Ptrs *ptrs = (RemoteDesktop_Ptrs*)reserved;
if (!ILibMemory_CanaryOK(ptrs)) { return(ILibTransport_DoneState_ERROR); }
#ifdef WIN32
if (duk_ctx_is_alive(ptrs->ctx))
{
if (!ILibIsRunningOnChainThread(duk_ctx_chain(ptrs->ctx)))
{
char *bstate = ILibMemory_SmartAllocateEx(bufferLen, sizeof(void*));
memcpy_s(bstate, (size_t)bufferLen, buffer, (size_t)bufferLen);
((void**)ILibMemory_Extra(bstate))[0] = ptrs;
ILibChain_RunOnMicrostackThreadEx3(duk_ctx_chain(ptrs->ctx), ILibDuktape_MeshAgent_RemoteDesktop_KVM_WriteSink_Chain, NULL, bstate);
return ILibTransport_DoneState_COMPLETE; // Always returning complete, because we'll let the stream object handle flow control
}
}
#endif
if (ptrs->stream != NULL)
{
if (ILibDuktape_DuplexStream_WriteData(ptrs->stream, buffer, bufferLen) != ILibTransport_DoneState_ERROR)