Paweł Janicki created THRIFT-3228:
-------------------------------------

             Summary: Fix TAutoOverlapThread may reference released memory
                 Key: THRIFT-3228
                 URL: https://issues.apache.org/jira/browse/THRIFT-3228
             Project: Thrift
          Issue Type: Bug
          Components: C++ - Library
    Affects Versions: 0.9.2
            Reporter: Paweł Janicki
            Priority: Critical


A released memory may be referenced by TAutoEverlapThread in case there exists 
a global instance of TPipeServer or TNamedPipeServer or TAutoOverlapThread in 
compilation module other than 
src\lib\cpp\src\thrift\windows\OverlappedSubmissionThread.cpp

TPipeServer on listen() instantiates TNamedPipeServer which instantiates 
TAutoOverlapThread. The TAutoOverlapThread calls in it's d-tor a static 
function TOverlappedSubmissionThread::release_instance(). This static functions 
refers to global variable "TCriticalSection 
TOverlappedSubmissionThread::instanceGuard_" defined in 
src\lib\cpp\src\thrift\windows\OverlappedSubmissionThread.cpp.

As the d-tion of globar variable is undefined across compilation modules it may 
happen that if user defined global variable holding reference to
TPipeServer, the instanceGuard_ can be freed by CRT before call to TPipeServer 
d-tor, which will reference deleted global variable instanceGuard_.

This is because of incorrect implementation of singleton pattern of 
TOverlappedSubmissionThread.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to