[ros-diffs] [weiden] 38572: Copying the string in NtUserDefSetText () must be protected with SEH, probing alone is not sufficient.

weiden at svn.reactos.org weiden at svn.reactos.org
Sun Jan 4 23:20:20 CET 2009


Author: weiden
Date: Sun Jan  4 16:20:19 2009
New Revision: 38572

URL: http://svn.reactos.org/svn/reactos?rev=38572&view=rev
Log:
Copying the string in NtUserDefSetText () must be protected with SEH, probing alone is not sufficient.

Modified:
    trunk/reactos/subsystems/win32/win32k/ntuser/window.c

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/window.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/window.c?rev=38572&r1=38571&r2=38572&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] Sun Jan  4 16:20:19 2009
@@ -4577,11 +4577,20 @@
       {
          ASSERT(Wnd->WindowName.Buffer != NULL);
 
-         Wnd->WindowName.Length = SafeText.Length;
-         Wnd->WindowName.Buffer[SafeText.Length / sizeof(WCHAR)] = L'\0';
-         RtlCopyMemory(Wnd->WindowName.Buffer,
-                              SafeText.Buffer,
-                              SafeText.Length);
+         _SEH2_TRY
+         {
+            Wnd->WindowName.Length = SafeText.Length;
+            Wnd->WindowName.Buffer[SafeText.Length / sizeof(WCHAR)] = L'\0';
+            RtlCopyMemory(Wnd->WindowName.Buffer,
+                          SafeText.Buffer,
+                          SafeText.Length);
+         }
+         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+         {
+            Ret = FALSE;
+            SetLastNtError(_SEH2_GetExceptionCode());
+         }
+         _SEH2_END;
       }
       else
       {
@@ -4598,12 +4607,23 @@
                                                    SafeText.Length + sizeof(UNICODE_NULL));
          if (Wnd->WindowName.Buffer != NULL)
          {
-            Wnd->WindowName.Buffer[SafeText.Length / sizeof(WCHAR)] = L'\0';
-            RtlCopyMemory(Wnd->WindowName.Buffer,
-                                 SafeText.Buffer,
-                                 SafeText.Length);
-            Wnd->WindowName.MaximumLength = SafeText.Length + sizeof(UNICODE_NULL);
-            Wnd->WindowName.Length = SafeText.Length;
+            _SEH2_TRY
+            {
+               Wnd->WindowName.Buffer[SafeText.Length / sizeof(WCHAR)] = L'\0';
+               RtlCopyMemory(Wnd->WindowName.Buffer,
+                             SafeText.Buffer,
+                             SafeText.Length);
+               Wnd->WindowName.MaximumLength = SafeText.Length + sizeof(UNICODE_NULL);
+               Wnd->WindowName.Length = SafeText.Length;
+            }
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+            {
+                Wnd->WindowName.Buffer = NULL;
+                DesktopHeapFree(Wnd->pdesktop, Wnd->WindowName.Buffer);
+                Ret = FALSE;
+                SetLastNtError(_SEH2_GetExceptionCode());
+            }
+            _SEH2_END;
          }
          else
          {



More information about the Ros-diffs mailing list