msvcrt: Use MSVCRT_CHECK_PMT for all security enhanced time functions

André Hentschel nerv at dawncrow.de
Tue Dec 20 12:30:54 CST 2011


---
 dlls/msvcrt/time.c |   37 +++++++++++++++++--------------------
 1 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c
index f9de5c5..35b4f1c 100644
--- a/dlls/msvcrt/time.c
+++ b/dlls/msvcrt/time.c
@@ -230,10 +230,9 @@ int CDECL _localtime64_s(struct MSVCRT_tm *time, const MSVCRT___time64_t *secs)
     struct tm *tm;
     time_t seconds;
 
-    if (!time || !secs || *secs < 0 || *secs > _MAX__TIME64_T)
-    {
-        if (time)
-            write_invalid_msvcrt_tm(time);
+    if( !MSVCRT_CHECK_PMT( time != NULL ) || !MSVCRT_CHECK_PMT( secs != NULL ) ||
+        !MSVCRT_CHECK_PMT( *secs >= 0 ) || !MSVCRT_CHECK_PMT( *secs <= _MAX__TIME64_T ) ) {
+        if (time) write_invalid_msvcrt_tm(time);
 
         *MSVCRT__errno() = MSVCRT_EINVAL;
         return MSVCRT_EINVAL;
@@ -270,10 +269,9 @@ int CDECL _localtime32_s(struct MSVCRT_tm *time, const MSVCRT___time32_t *secs)
 {
     MSVCRT___time64_t secs64;
 
-    if (!time || !secs || *secs < 0)
-    {
-        if (time)
-            write_invalid_msvcrt_tm(time);
+    if( !MSVCRT_CHECK_PMT( time != NULL ) || !MSVCRT_CHECK_PMT( secs != NULL ) ||
+        !MSVCRT_CHECK_PMT( *secs >= 0 ) ) {
+        if (time) write_invalid_msvcrt_tm(time);
 
         *MSVCRT__errno() = MSVCRT_EINVAL;
         return MSVCRT_EINVAL;
@@ -308,10 +306,9 @@ int CDECL MSVCRT__gmtime64_s(struct MSVCRT_tm *res, const MSVCRT___time64_t *sec
     SYSTEMTIME st;
     ULONGLONG time;
 
-    if (!res || !secs || *secs < 0) {
-        if (res) {
-            write_invalid_msvcrt_tm(res);
-        }
+    if( !MSVCRT_CHECK_PMT( res != NULL ) || !MSVCRT_CHECK_PMT( secs != NULL ) ||
+        !MSVCRT_CHECK_PMT( *secs >= 0 ) ) {
+        if (res) write_invalid_msvcrt_tm(res);
 
         *MSVCRT__errno() = MSVCRT_EINVAL;
         return MSVCRT_EINVAL;
@@ -419,12 +416,12 @@ int CDECL _strdate_s(char* date, MSVCRT_size_t size)
     if(date && size)
         date[0] = '\0';
 
-    if(!date) {
+    if( !MSVCRT_CHECK_PMT( date != NULL ) ) {
         *MSVCRT__errno() = MSVCRT_EINVAL;
         return MSVCRT_EINVAL;
     }
 
-    if(size < 9) {
+    if( !MSVCRT_CHECK_PMT( size >= 9 ) ) {
         *MSVCRT__errno() = MSVCRT_ERANGE;
         return MSVCRT_ERANGE;
     }
@@ -453,12 +450,12 @@ int CDECL _wstrdate_s(MSVCRT_wchar_t* date, MSVCRT_size_t size)
     if(date && size)
         date[0] = '\0';
 
-    if(!date) {
+    if( !MSVCRT_CHECK_PMT( date != NULL ) ) {
         *MSVCRT__errno() = MSVCRT_EINVAL;
         return MSVCRT_EINVAL;
     }
 
-    if(size < 9) {
+    if( !MSVCRT_CHECK_PMT( size >= 9 ) ) {
         *MSVCRT__errno() = MSVCRT_ERANGE;
         return MSVCRT_ERANGE;
     }
@@ -487,12 +484,12 @@ int CDECL _strtime_s(char* time, MSVCRT_size_t size)
     if(time && size)
         time[0] = '\0';
 
-    if(!time) {
+    if( !MSVCRT_CHECK_PMT( time != NULL ) ) {
         *MSVCRT__errno() = MSVCRT_EINVAL;
         return MSVCRT_EINVAL;
     }
 
-    if(size < 9) {
+    if( !MSVCRT_CHECK_PMT( size >= 9 ) ) {
         *MSVCRT__errno() = MSVCRT_ERANGE;
         return MSVCRT_ERANGE;
     }
@@ -521,12 +518,12 @@ int CDECL _wstrtime_s(MSVCRT_wchar_t* time, MSVCRT_size_t size)
     if(time && size)
         time[0] = '\0';
 
-    if(!time) {
+    if( !MSVCRT_CHECK_PMT( time != NULL ) ) {
         *MSVCRT__errno() = MSVCRT_EINVAL;
         return MSVCRT_EINVAL;
     }
 
-    if(size < 9) {
+    if( !MSVCRT_CHECK_PMT( size >= 9 ) ) {
         *MSVCRT__errno() = MSVCRT_ERANGE;
         return MSVCRT_ERANGE;
     }
-- 

Best Regards, André Hentschel



More information about the wine-patches mailing list