Sebastian Lackner : ntdll: Allow passing NULL buffer to printf functions.
Alexandre Julliard
julliard at winehq.org
Mon Dec 23 13:44:57 CST 2013
Module: wine
Branch: master
Commit: 3c2dc4a7b3d5187307edc678b805b4c64ab16351
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3c2dc4a7b3d5187307edc678b805b4c64ab16351
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Fri Dec 20 05:56:40 2013 +0100
ntdll: Allow passing NULL buffer to printf functions.
---
dlls/ntdll/printf.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/dlls/ntdll/printf.c b/dlls/ntdll/printf.c
index e09833a..65dc62d 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;
}
More information about the wine-cvs
mailing list