"Mike McCormack" mike@codeweavers.com wrote:
INT WINAPI GetClassNameA( HWND hwnd, LPSTR buffer, INT count ) {
- INT ret = GlobalGetAtomNameA( GetClassLongA( hwnd, GCW_ATOM ), buffer, count );
- INT ret;
- ret = GlobalGetAtomNameA( GetClassLongA( hwnd, GCW_ATOM ), buffer, count );
- if (!ret && count)
ret = lstrlenA( buffer );
This won't work as expected if hwnd is invalid and buffer contains some '\0' terminated data. Probably a better aproach would be to call GlobalGetAtomNameA with a buffer of size MAX_ATOM_LEN + 1 allocated on the stack (MAX_ATOM_LEN is defined in dlls/kernel32/atom.c as 255) and only if the call succeeds copy the data. GetClassNameW neededs to be fixed as well.
Dmitry Timoshkov wrote:
This won't work as expected if hwnd is invalid and buffer contains some '\0' terminated data. Probably a better aproach would be to call GlobalGetAtomNameA with a buffer of size MAX_ATOM_LEN + 1 allocated on the stack (MAX_ATOM_LEN is defined in dlls/kernel32/atom.c as 255) and only if the call succeeds copy the data. GetClassNameW neededs to be fixed as well.
Yes, I realize GetClassNameW needs to be fixed, but it was late and I just wanted to get the fix out for comment... which I got... thanks.
Maybe it would be better to call NtQueryInformationAtom directly in this case rather than working around deficiencies in GlobalGetAtomName?
Mike