Marcus Meissner : setupx.dll16: Avoid strcmp() result truncation (Coverity) .
Module: wine Branch: master Commit: a181e4dfe9e7a4c9644194fc8a5748d52ba2a53f URL: http://source.winehq.org/git/wine.git/?a=commit;h=a181e4dfe9e7a4c9644194fc8a... Author: Marcus Meissner <marcus(a)jet.franken.de> Date: Sat Jul 7 11:52:22 2012 +0200 setupx.dll16: Avoid strcmp() result truncation (Coverity). --- dlls/setupx.dll16/virtcopy.c | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/dlls/setupx.dll16/virtcopy.c b/dlls/setupx.dll16/virtcopy.c index a718ac9..141fbd2 100644 --- a/dlls/setupx.dll16/virtcopy.c +++ b/dlls/setupx.dll16/virtcopy.c @@ -591,9 +591,17 @@ static void VCP_UI_RegisterProgressClass(void) static RETERR16 VCP_UI_NodeCompare(LPVIRTNODE vn1, LPVIRTNODE vn2) { LPCSTR file1, file2; + int ret; file1 = vsmGetStringRawName16(vn1->vfsSrc.vhstrFileName); file2 = vsmGetStringRawName16(vn2->vfsSrc.vhstrFileName); - return (RETERR16)strcmp(file1, file2); + + ret = strcmp(file1, file2); + /* Looks too complicated, but in optimized strcpy we might get + * a 32bit wide difference and would truncate it to 16 bit, so + * erroneously returning equality. */ + if (ret < 0) return -1; + if (ret > 0) return 1; + return 0; } static RETERR16 VCP_UI_CopyStart(void)
participants (1)
-
Alexandre Julliard