- Add SEH protection for FindResourceExW
authorDmitry Chapyshev <dmitry@reactos.org>
Tue, 10 Feb 2009 14:08:05 +0000 (14:08 +0000)
committerDmitry Chapyshev <dmitry@reactos.org>
Tue, 10 Feb 2009 14:08:05 +0000 (14:08 +0000)
Notepad++ works now

svn path=/trunk/; revision=39531

reactos/dll/win32/kernel32/misc/res.c

index 06a2cb2..db00fac 100644 (file)
@@ -1197,21 +1197,30 @@ FindResourceExW (
        if ( hModule == NULL )
                hModule = (HINSTANCE)GetModuleHandleW(NULL);
 
-       if ( !IS_INTRESOURCE(lpName) && lpName[0] == L'#' ) {
-               lpName = MAKEINTRESOURCEW(wcstoul(lpName + 1, NULL, 10));
+       _SEH2_TRY
+       {
+               if ( !IS_INTRESOURCE(lpName) && lpName[0] == L'#' ) {
+                       lpName = MAKEINTRESOURCEW(wcstoul(lpName + 1, NULL, 10));
+               }
+               if ( !IS_INTRESOURCE(lpType) && lpType[0] == L'#' ) {
+                       lpType = MAKEINTRESOURCEW(wcstoul(lpType + 1, NULL, 10));
+               }
+
+               ResourceInfo.Type = (ULONG)lpType;
+               ResourceInfo.Name = (ULONG)lpName;
+               ResourceInfo.Language = (ULONG)wLanguage;
+
+               Status = LdrFindResource_U (hModule,
+                                               &ResourceInfo,
+                                               RESOURCE_DATA_LEVEL,
+                                               &ResourceDataEntry);
        }
-       if ( !IS_INTRESOURCE(lpType) && lpType[0] == L'#' ) {
-               lpType = MAKEINTRESOURCEW(wcstoul(lpType + 1, NULL, 10));
+       _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+       {
+               Status = _SEH2_GetExceptionCode();
        }
+       _SEH2_END;
 
-       ResourceInfo.Type = (ULONG)lpType;
-       ResourceInfo.Name = (ULONG)lpName;
-       ResourceInfo.Language = (ULONG)wLanguage;
-
-       Status = LdrFindResource_U (hModule,
-                                   &ResourceInfo,
-                                   RESOURCE_DATA_LEVEL,
-                                   &ResourceDataEntry);
        if (!NT_SUCCESS(Status))
        {
                SetLastErrorByStatus (Status);