mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 19:01:48 +00:00
[PSDK]
Fix NULL-termination bugs in ntstrunsafe.h svn path=/trunk/; revision=66637
This commit is contained in:
parent
4beaf120e7
commit
1e9299af24
1 changed files with 167 additions and 24 deletions
|
@ -117,7 +117,14 @@ RtlStringCchCopyA(
|
|||
_In_ size_t cchDest,
|
||||
_In_ NTSTRSAFE_PCSTR pszSrc)
|
||||
{
|
||||
return (cchDest > NTSTRSAFE_MAX_CCH ? STATUS_INVALID_PARAMETER : RtlStringCopyWorkerA(pszDest,cchDest,pszSrc));
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
return RtlStringCopyWorkerA(pszDest, cchDest, pszSrc);
|
||||
}
|
||||
|
||||
NTSTRSAFEAPI
|
||||
|
@ -127,7 +134,12 @@ RtlStringCchCopyW(
|
|||
_In_ NTSTRSAFE_PCWSTR pszSrc)
|
||||
{
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
return RtlStringCopyWorkerW(pszDest,cchDest,pszSrc);
|
||||
}
|
||||
|
||||
|
@ -149,8 +161,13 @@ RtlStringCbCopyA(
|
|||
_In_ size_t cbDest,
|
||||
_In_ NTSTRSAFE_PCSTR pszSrc)
|
||||
{
|
||||
if (cbDest > NTSTRSAFE_MAX_CCH)
|
||||
size_t cchDest = cbDest / sizeof(char);
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
return RtlStringCopyWorkerA(pszDest,cbDest,pszSrc);
|
||||
}
|
||||
|
||||
|
@ -162,7 +179,11 @@ RtlStringCbCopyW(
|
|||
{
|
||||
size_t cchDest = cbDest / sizeof(wchar_t);
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
return RtlStringCopyWorkerW(pszDest,cchDest,pszSrc);
|
||||
}
|
||||
|
||||
|
@ -194,7 +215,11 @@ RtlStringCchCopyExA(
|
|||
_In_ STRSAFE_DWORD dwFlags)
|
||||
{
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
return RtlStringCopyExWorkerA(pszDest,cchDest,cchDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
|
||||
}
|
||||
|
||||
|
@ -207,10 +232,15 @@ RtlStringCchCopyExW(
|
|||
_Out_opt_ size_t *pcchRemaining,
|
||||
_In_ STRSAFE_DWORD dwFlags)
|
||||
{
|
||||
size_t cbDest;
|
||||
size_t cbDest = cchDest * sizeof(wchar_t);
|
||||
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
cbDest = cchDest * sizeof(wchar_t);
|
||||
}
|
||||
|
||||
return RtlStringCopyExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,pcchRemaining,dwFlags);
|
||||
}
|
||||
|
||||
|
@ -242,9 +272,16 @@ RtlStringCbCopyExA(
|
|||
_In_ STRSAFE_DWORD dwFlags)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
size_t cchDest = cbDest / sizeof(char);
|
||||
size_t cchRemaining = 0;
|
||||
if (cbDest > NTSTRSAFE_MAX_CCH)
|
||||
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Status = RtlStringCopyExWorkerA(pszDest,cbDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
|
||||
if (NT_SUCCESS(Status) || Status == STATUS_BUFFER_OVERFLOW)
|
||||
{
|
||||
|
@ -268,7 +305,12 @@ RtlStringCbCopyExW(
|
|||
size_t cchRemaining = 0;
|
||||
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Status = RtlStringCopyExWorkerW(pszDest,cchDest,cbDest,pszSrc,ppszDestEnd,&cchRemaining,dwFlags);
|
||||
if (NT_SUCCESS(Status) || (Status==STATUS_BUFFER_OVERFLOW))
|
||||
{
|
||||
|
@ -301,7 +343,12 @@ RtlStringCchCopyNA(
|
|||
_In_ size_t cchToCopy)
|
||||
{
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH || cchToCopy > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
return RtlStringCopyNWorkerA(pszDest,cchDest,pszSrc,cchToCopy);
|
||||
}
|
||||
|
||||
|
@ -313,7 +360,12 @@ RtlStringCchCopyNW(
|
|||
_In_ size_t cchToCopy)
|
||||
{
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH || cchToCopy > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
return RtlStringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy);
|
||||
}
|
||||
|
||||
|
@ -338,9 +390,17 @@ RtlStringCbCopyNA(
|
|||
_In_reads_bytes_(cbToCopy) STRSAFE_LPCSTR pszSrc,
|
||||
_In_ size_t cbToCopy)
|
||||
{
|
||||
if (cbDest > NTSTRSAFE_MAX_CCH || cbToCopy > NTSTRSAFE_MAX_CCH)
|
||||
size_t cchDest = cbDest / sizeof(char);
|
||||
size_t cchToCopy = cbToCopy / sizeof(char);
|
||||
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH || cchToCopy > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
return RtlStringCopyNWorkerA(pszDest,cbDest,pszSrc,cbToCopy);
|
||||
}
|
||||
|
||||
return RtlStringCopyNWorkerA(pszDest, cchDest, pszSrc, cchToCopy);
|
||||
}
|
||||
|
||||
NTSTRSAFEAPI
|
||||
|
@ -352,9 +412,15 @@ RtlStringCbCopyNW(
|
|||
{
|
||||
size_t cchDest = cbDest / sizeof(wchar_t);
|
||||
size_t cchToCopy = cbToCopy / sizeof(wchar_t);
|
||||
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH || cchToCopy > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
return RtlStringCopyNWorkerW(pszDest,cchDest,pszSrc,cchToCopy);
|
||||
}
|
||||
|
||||
return RtlStringCopyNWorkerW(pszDest, cchDest, pszSrc, cchToCopy);
|
||||
}
|
||||
|
||||
NTSTRSAFEAPI
|
||||
|
@ -388,8 +454,13 @@ RtlStringCchCopyNExA(
|
|||
_In_ STRSAFE_DWORD dwFlags)
|
||||
{
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
return RtlStringCopyNExWorkerA(pszDest,cchDest,cchDest,pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags);
|
||||
}
|
||||
|
||||
return RtlStringCopyNExWorkerA(pszDest, cchDest, cchDest, pszSrc, cchToCopy, ppszDestEnd, pcchRemaining, dwFlags);
|
||||
}
|
||||
|
||||
NTSTRSAFEAPI
|
||||
|
@ -403,8 +474,13 @@ RtlStringCchCopyNExW(
|
|||
_In_ STRSAFE_DWORD dwFlags)
|
||||
{
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
return RtlStringCopyNExWorkerW(pszDest,cchDest,cchDest * sizeof(wchar_t),pszSrc,cchToCopy,ppszDestEnd,pcchRemaining,dwFlags);
|
||||
}
|
||||
|
||||
return RtlStringCopyNExWorkerW(pszDest,cchDest,cchDest * sizeof(wchar_t), pszSrc, cchToCopy, ppszDestEnd, pcchRemaining, dwFlags);
|
||||
}
|
||||
|
||||
NTSTRSAFEAPI
|
||||
|
@ -439,10 +515,15 @@ RtlStringCbCopyNExA(
|
|||
{
|
||||
NTSTATUS Status;
|
||||
size_t cchRemaining = 0;
|
||||
|
||||
if (cbDest > NTSTRSAFE_MAX_CCH)
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
else
|
||||
Status = RtlStringCopyNExWorkerA(pszDest,cbDest,cbDest,pszSrc,cbToCopy,ppszDestEnd,&cchRemaining,dwFlags);
|
||||
{
|
||||
if ((pszDest != NULL) && (cbDest > 0))
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Status = RtlStringCopyNExWorkerA(pszDest,cbDest,cbDest,pszSrc,cbToCopy,ppszDestEnd,&cchRemaining,dwFlags);
|
||||
if ((NT_SUCCESS(Status) || Status == STATUS_BUFFER_OVERFLOW) && pcbRemaining)
|
||||
*pcbRemaining = cchRemaining;
|
||||
return Status;
|
||||
|
@ -465,9 +546,13 @@ RtlStringCbCopyNExW(
|
|||
cchDest = cbDest / sizeof(wchar_t);
|
||||
cchToCopy = cbToCopy / sizeof(wchar_t);
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
else
|
||||
Status = RtlStringCopyNExWorkerW(pszDest,cchDest,cbDest,pszSrc,cchToCopy,ppszDestEnd,&cchRemaining,dwFlags);
|
||||
{
|
||||
if ((pszDest != NULL) && (cbDest > 0))
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Status = RtlStringCopyNExWorkerW(pszDest,cchDest,cbDest,pszSrc,cchToCopy,ppszDestEnd,&cchRemaining,dwFlags);
|
||||
if ((NT_SUCCESS(Status) || Status == STATUS_BUFFER_OVERFLOW) && pcbRemaining)
|
||||
*pcbRemaining = (cchRemaining*sizeof(wchar_t)) + (cbDest % sizeof(wchar_t));
|
||||
return Status;
|
||||
|
@ -864,7 +949,12 @@ RtlStringCchVPrintfA(
|
|||
_In_ va_list argList)
|
||||
{
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
return RtlStringVPrintfWorkerA(pszDest,cchDest,pszFormat,argList);
|
||||
}
|
||||
|
||||
|
@ -876,7 +966,11 @@ RtlStringCchVPrintfW(
|
|||
_In_ va_list argList)
|
||||
{
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
return RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
|
||||
}
|
||||
|
||||
|
@ -902,7 +996,11 @@ RtlStringCbVPrintfA(
|
|||
_In_ va_list argList)
|
||||
{
|
||||
if (cbDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cbDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
return RtlStringVPrintfWorkerA(pszDest,cbDest,pszFormat,argList);
|
||||
}
|
||||
|
||||
|
@ -915,7 +1013,11 @@ RtlStringCbVPrintfW(
|
|||
{
|
||||
size_t cchDest = cbDest / sizeof(wchar_t);
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
return RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
|
||||
}
|
||||
|
||||
|
@ -943,7 +1045,11 @@ RtlStringCchPrintfA(
|
|||
NTSTATUS Status;
|
||||
va_list argList;
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
va_start(argList,pszFormat);
|
||||
Status = RtlStringVPrintfWorkerA(pszDest,cchDest,pszFormat,argList);
|
||||
va_end(argList);
|
||||
|
@ -960,7 +1066,11 @@ RtlStringCchPrintfW(
|
|||
NTSTATUS Status;
|
||||
va_list argList;
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
va_start(argList,pszFormat);
|
||||
Status = RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
|
||||
va_end(argList);
|
||||
|
@ -991,7 +1101,11 @@ RtlStringCbPrintfA(
|
|||
NTSTATUS Status;
|
||||
va_list argList;
|
||||
if (cbDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cbDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
va_start(argList,pszFormat);
|
||||
Status = RtlStringVPrintfWorkerA(pszDest,cbDest,pszFormat,argList);
|
||||
va_end(argList);
|
||||
|
@ -1009,7 +1123,11 @@ RtlStringCbPrintfW(
|
|||
va_list argList;
|
||||
size_t cchDest = cbDest / sizeof(wchar_t);
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
va_start(argList,pszFormat);
|
||||
Status = RtlStringVPrintfWorkerW(pszDest,cchDest,pszFormat,argList);
|
||||
va_end(argList);
|
||||
|
@ -1049,7 +1167,11 @@ RtlStringCchPrintfExA(
|
|||
NTSTATUS Status;
|
||||
va_list argList;
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
va_start(argList,pszFormat);
|
||||
Status = RtlStringVPrintfExWorkerA(pszDest,cchDest,cchDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
|
||||
va_end(argList);
|
||||
|
@ -1070,7 +1192,11 @@ RtlStringCchPrintfExW(
|
|||
size_t cbDest = cchDest * sizeof(wchar_t);
|
||||
va_list argList;
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
va_start(argList,pszFormat);
|
||||
Status = RtlStringVPrintfExWorkerW(pszDest,cchDest,cbDest,ppszDestEnd,pcchRemaining,dwFlags,pszFormat,argList);
|
||||
va_end(argList);
|
||||
|
@ -1110,10 +1236,15 @@ RtlStringCbPrintfExA(
|
|||
NTSTATUS Status;
|
||||
size_t cchDest;
|
||||
size_t cchRemaining = 0;
|
||||
|
||||
cchDest = cbDest / sizeof(char);
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
else
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
{
|
||||
va_list argList;
|
||||
va_start(argList,pszFormat);
|
||||
|
@ -1145,8 +1276,12 @@ RtlStringCbPrintfExW(
|
|||
size_t cchRemaining = 0;
|
||||
cchDest = cbDest / sizeof(wchar_t);
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
else
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
{
|
||||
va_list argList;
|
||||
va_start(argList,pszFormat);
|
||||
|
@ -1195,8 +1330,12 @@ RtlStringCchVPrintfExA(
|
|||
{
|
||||
NTSTATUS Status;
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
else
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = '\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
{
|
||||
size_t cbDest;
|
||||
cbDest = cchDest*sizeof(char);
|
||||
|
@ -1217,8 +1356,12 @@ RtlStringCchVPrintfExW(
|
|||
{
|
||||
NTSTATUS Status;
|
||||
if (cchDest > NTSTRSAFE_MAX_CCH)
|
||||
Status = STATUS_INVALID_PARAMETER;
|
||||
else
|
||||
{
|
||||
if (cchDest > 0)
|
||||
*pszDest = L'\0';
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
{
|
||||
size_t cbDest;
|
||||
cbDest = cchDest*sizeof(wchar_t);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue