[ros-diffs] [fireball] 34995: Gregor Schneider <grschneider at gmail.com> - Return error code "buffer overflow" instead of "buffer too small" and only do that if really necessary - Only append 0 if Length parameter allows to do so - Use uppercase letters Aleksey Bragin <aleksey at reactos.org> - Wrap it into PSEH, however commented out till a solution for the bootloader is found (linking freeldr with PSEH is not very beautiful). See issue #3583 for more details.

fireball at svn.reactos.org fireball at svn.reactos.org
Fri Aug 1 13:54:27 CEST 2008


Author: fireball
Date: Fri Aug  1 06:54:27 2008
New Revision: 34995

URL: http://svn.reactos.org/svn/reactos?rev=34995&view=rev
Log:
Gregor Schneider <grschneider at gmail.com>
- Return error code "buffer overflow" instead of "buffer too small" and only do that if really necessary
- Only append 0 if Length parameter allows to do so
- Use uppercase letters

Aleksey Bragin <aleksey at reactos.org>
- Wrap it into PSEH, however commented out till a solution for the bootloader is found (linking freeldr with PSEH is not very beautiful).
See issue #3583 for more details.

Modified:
    trunk/reactos/lib/rtl/unicode.c

Modified: trunk/reactos/lib/rtl/unicode.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/unicode.c?rev=34995&r1=34994&r2=34995&view=diff
==============================================================================
--- trunk/reactos/lib/rtl/unicode.c [iso-8859-1] (original)
+++ trunk/reactos/lib/rtl/unicode.c [iso-8859-1] Fri Aug  1 06:54:27 2008
@@ -1515,6 +1515,7 @@
    IN ULONG  Length,
    IN OUT PCHAR  String)
 {
+   NTSTATUS Status = STATUS_SUCCESS;
    ULONG Radix;
    CHAR  temp[65];
    ULONGLONG v = Value->QuadPart;
@@ -1538,19 +1539,32 @@
       if (i < 10)
          *tp = i + '0';
       else
-         *tp = i + 'a' - 10;
+         *tp = i + 'A' - 10;
       tp++;
    }
 
-   if ((ULONG)((ULONG_PTR)tp - (ULONG_PTR)temp) >= Length)
-      return STATUS_BUFFER_TOO_SMALL;
-
-   sp = String;
-   while (tp > temp)
-      *sp++ = *--tp;
-   *sp = 0;
-
-   return STATUS_SUCCESS;
+   if ((ULONG)((ULONG_PTR)tp - (ULONG_PTR)temp) > Length)
+      return STATUS_BUFFER_OVERFLOW;
+
+   //_SEH_TRY
+   {
+      sp = String;
+      while (tp > temp)
+         *sp++ = *--tp;
+
+      if((ULONG)((ULONG_PTR)sp - (ULONG_PTR)String) < Length)
+         *sp = 0;
+   }
+#if 0
+   _SEH_HANDLE
+   {
+      /* Get the error code */
+      Status = _SEH_GetExceptionCode();
+   }
+   _SEH_END;
+#endif
+
+   return Status;
 }
 
 /*



More information about the Ros-diffs mailing list