Sebastian Lackner : kernel32: Fix calculation of returned buffer in get_registry_locale_info.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Apr 6 10:34:18 CDT 2015
Module: wine
Branch: master
Commit: 51c21cca9848d65948d14bd70ddf37ca2e2faf83
URL: http://source.winehq.org/git/wine.git/?a=commit;h=51c21cca9848d65948d14bd70ddf37ca2e2faf83
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Fri Apr 3 14:25:57 2015 +0200
kernel32: Fix calculation of returned buffer in get_registry_locale_info.
Fixes a regression introduced by 8826ba1bc86fefa22c543608585ae8f3b4310a5f.
---
dlls/kernel32/locale.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index afc5b9d..7798b91 100644
--- a/dlls/kernel32/locale.c
+++ b/dlls/kernel32/locale.c
@@ -1177,6 +1177,17 @@ static INT get_registry_locale_info( struct registry_value *registry_value, LPWS
status = NtQueryValueKey( hkey, &nameW, KeyValuePartialInformation, info, size, &size );
+ /* try again with a bigger buffer when we have to return the correct size */
+ if (status == STATUS_BUFFER_OVERFLOW && !buffer && size > info_size)
+ {
+ KEY_VALUE_PARTIAL_INFORMATION *new_info;
+ if ((new_info = HeapReAlloc( GetProcessHeap(), 0, info, size )))
+ {
+ info = new_info;
+ status = NtQueryValueKey( hkey, &nameW, KeyValuePartialInformation, info, size, &size );
+ }
+ }
+
NtClose( hkey );
if (!status)
@@ -1207,8 +1218,6 @@ static INT get_registry_locale_info( struct registry_value *registry_value, LPWS
if (status == STATUS_BUFFER_OVERFLOW && !buffer)
{
ret = (size - info_size) / sizeof(WCHAR);
- if (!ret || ((WCHAR *)&info->Data)[ret-1])
- ret++;
}
else if (status == STATUS_OBJECT_NAME_NOT_FOUND)
{
More information about the wine-cvs
mailing list