From 3c2dc4a7b3d5187307edc678b805b4c64ab16351 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Fri, 20 Dec 2013 05:56:40 +0100 Subject: [PATCH] ntdll: Allow passing NULL buffer to printf functions. --- dlls/ntdll/printf.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/dlls/ntdll/printf.c b/dlls/ntdll/printf.c index e09833a6348..65dc62dff4e 100644 --- a/dlls/ntdll/printf.c +++ b/dlls/ntdll/printf.c @@ -75,16 +75,17 @@ static inline int pf_output_stringW( pf_output *out, LPCWSTR str, int len ) if( out->unicode ) { LPWSTR p = out->buf.W + out->used; + out->used += len; + if (!out->buf.W) + return len; if( space >= len ) { memcpy( p, str, len*sizeof(WCHAR) ); - out->used += len; return len; } if( space > 0 ) memcpy( p, str, space*sizeof(WCHAR) ); - out->used += len; } else { @@ -92,14 +93,16 @@ static inline int pf_output_stringW( pf_output *out, LPCWSTR str, int len ) ULONG n; RtlUnicodeToMultiByteSize( &n, str, len * sizeof(WCHAR) ); + out->used += n; + + if (!out->buf.A) + return len; if( space >= n ) { RtlUnicodeToMultiByteN( p, n, NULL, str, len * sizeof(WCHAR) ); - out->used += n; return len; } if (space > 0) RtlUnicodeToMultiByteN( p, space, NULL, str, len * sizeof(WCHAR) ); - out->used += n; } return -1; } @@ -113,16 +116,17 @@ static inline int pf_output_stringA( pf_output *out, LPCSTR str, int len ) if( !out->unicode ) { LPSTR p = out->buf.A + out->used; + out->used += len; + if (!out->buf.A) + return len; if( space >= len ) { memcpy( p, str, len ); - out->used += len; return len; } if( space > 0 ) memcpy( p, str, space ); - out->used += len; } else { @@ -130,14 +134,16 @@ static inline int pf_output_stringA( pf_output *out, LPCSTR str, int len ) ULONG n; RtlMultiByteToUnicodeSize( &n, str, len ); + out->used += n / sizeof(WCHAR); + + if (!out->buf.W) + return len; if (space >= n / sizeof(WCHAR)) { RtlMultiByteToUnicodeN( p, n, NULL, str, len ); - out->used += n / sizeof(WCHAR); return len; } if (space > 0) RtlMultiByteToUnicodeN( p, space * sizeof(WCHAR), NULL, str, len ); - out->used += n / sizeof(WCHAR); } return -1; }