From e27e75b197c7b0bc631c9aec50b307745087d5e6 Mon Sep 17 00:00:00 2001 From: Asher Baker Date: Thu, 11 Oct 2018 00:18:03 +0100 Subject: [PATCH] Handle NULLs in SDKCall string return (Fixes #874) (#906) `SDKCall` has existing semantics that a `-1` retval indicates null, so use that and writes an empty string to the buffer. Consumers can tell the difference between `""` and `NULL` by checking if the return value is `0` or `-1`. --- extensions/sdktools/vcaller.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extensions/sdktools/vcaller.cpp b/extensions/sdktools/vcaller.cpp index 7a0c3113..78ae677d 100644 --- a/extensions/sdktools/vcaller.cpp +++ b/extensions/sdktools/vcaller.cpp @@ -445,6 +445,11 @@ static cell_t SDKCall(IPluginContext *pContext, const cell_t *params) cell_t *addr; size_t written; pContext->LocalToPhysAddr(params[retparam+1], &addr); + if (!(*(char **)vc->retbuf)) + { + pContext->StringToLocalUTF8(params[retparam], *addr, "", &written); + return -1; + } pContext->StringToLocalUTF8(params[retparam], *addr, *(char **)vc->retbuf, &written); return (cell_t)written; } else if (vc->retinfo->vtype == Valve_Vector