[PATCH 1/2] kernel32/tests: Add a test case for calling TlsFree on a freed index.

Reece Dunn msclrhd at googlemail.com
Tue Mar 2 14:04:04 CST 2010


Hi,

TlsFree should return FALSE if there wasn't a TLS slot of the
specified index allocated, as well as returning
ERROR_INVALID_PARAMETER.

- Reece
-------------- next part --------------
From b1423bf14dc04807bb09782d7141b0cec0e22f8a Mon Sep 17 00:00:00 2001
From: Reece Dunn <msclrhd at gmail.com>
Date: Tue, 2 Mar 2010 19:55:57 +0000
Subject: [PATCH 1/2] kernel32/tests: Add a test case for calling TlsFree on a freed index.

---
 dlls/kernel32/process.c      |    8 ++++++--
 dlls/kernel32/tests/thread.c |    6 +++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 1ef3e46..e6905fb 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -2494,9 +2494,13 @@ BOOL WINAPI TlsFree( DWORD index )
         if (ret) RtlClearBits( NtCurrentTeb()->Peb->TlsBitmap, index, 1 );
     }
     if (ret) NtSetInformationThread( GetCurrentThread(), ThreadZeroTlsCell, &index, sizeof(index) );
-    else SetLastError( ERROR_INVALID_PARAMETER );
+    else
+    {
+        ret = FALSE;
+        SetLastError( ERROR_INVALID_PARAMETER );
+    }
     RtlReleasePebLock();
-    return TRUE;
+    return ret;
 }
 
 
diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
index 83d13c5..5306dda 100644
--- a/dlls/kernel32/tests/thread.c
+++ b/dlls/kernel32/tests/thread.c
@@ -421,7 +421,11 @@ static VOID test_CreateThread_basic(void)
          "Thread did not execute successfully\n");
     ok(CloseHandle(thread[i])!=0,"CloseHandle failed\n");
   }
-  ok(TlsFree(tlsIndex)!=0,"TlsFree failed\n");
+  ok(TlsFree(tlsIndex)!=0,"TlsFree failed: %08x\n", GetLastError());
+  /* Test freeing an already freed TLS index */
+  ok(TlsFree(tlsIndex)==0,"TlsFree succeeded\n");
+  ok(GetLastError()==ERROR_INVALID_PARAMETER,
+     "GetLastError: expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError());
 
   /* Test how passing NULL as a pointer to threadid works */
   SetLastError(0xFACEaBAD);
-- 
1.6.3.3


More information about the wine-patches mailing list