VarValue.MaximumLength = (nSize != 0 ? (nSize - 1) * sizeof(WCHAR) : 0);
VarValue.Buffer = lpBuffer;
Status = RtlQueryEnvironmentVariable_U (NULL,
@@ -125,13 +150,17 @@
SetLastErrorByStatus (Status); if (Status == STATUS_BUFFER_TOO_SMALL) {
return (VarValue.Length / sizeof(WCHAR)) + 1;
return (VarValue.Length / sizeof(WCHAR)) + 1;} else { return 0; } }
/* make sure the string is NULL-terminated! RtlQueryEnvironmentVariable_U
only terminates it if MaximumLength < Length */VarValue.Buffer[VarValue.Length / sizeof(WCHAR)] = L'\0';
Is it possible for an environment variable's value to be empty?
If it is, RtlQueryEnvironmentVariable_U() could succeeded even if a zero length buffer is passed in. And then, would we crash appending the NUL termination?
Since GetEnvironmentVariable has to have a buffer of at least one character to succeed, maybe we should add such a guard to the top of the function...
Thanks,
Joseph