Alexandre Julliard : kernel32:
Fixed buffer overrun in get_registry_locale_info.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Nov 9 06:08:51 CST 2006
Module: wine
Branch: master
Commit: 63ca94c4199d17b28b82a3f7165bb223703fafc9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=63ca94c4199d17b28b82a3f7165bb223703fafc9
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Nov 9 12:03:21 2006 +0100
kernel32: Fixed buffer overrun in get_registry_locale_info.
---
dlls/kernel32/locale.c | 17 ++++++++++-------
1 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c
index dd687ed..9a72a4c 100644
--- a/dlls/kernel32/locale.c
+++ b/dlls/kernel32/locale.c
@@ -804,7 +804,6 @@ static INT get_registry_locale_info( LPC
}
status = NtQueryValueKey( hkey, &nameW, KeyValuePartialInformation, info, size, &size );
- if (status == STATUS_BUFFER_OVERFLOW && !buffer) status = 0;
if (!status)
{
@@ -825,14 +824,18 @@ static INT get_registry_locale_info( LPC
buffer[ret-1] = 0;
}
}
+ else if (status == STATUS_BUFFER_OVERFLOW && !buffer)
+ {
+ ret = (size - info_size) / sizeof(WCHAR) + 1;
+ }
+ else if (status == STATUS_OBJECT_NAME_NOT_FOUND)
+ {
+ ret = -1;
+ }
else
{
- if (status == STATUS_OBJECT_NAME_NOT_FOUND) ret = -1;
- else
- {
- SetLastError( RtlNtStatusToDosError(status) );
- ret = 0;
- }
+ SetLastError( RtlNtStatusToDosError(status) );
+ ret = 0;
}
NtClose( hkey );
HeapFree( GetProcessHeap(), 0, info );
More information about the wine-cvs
mailing list