This is an automated email from the ASF dual-hosted git repository. scantor pushed a commit to branch xerces-3.2 in repository https://gitbox.apache.org/repos/asf/xerces-c.git
commit e1665b4c4bd2f3e3ac637d36ac6515cf64c3bab2 Author: Roger Leigh <rle...@apache.org> AuthorDate: Tue Aug 24 06:23:42 2021 +0100 Merge pull request #28 from rouault/curl_memleak_fix XERCESC-2218: CurlURLInputStream constructor: avoid memory leak --- .../util/NetAccessors/Curl/CurlURLInputStream.cpp | 28 +++++++++++++++++++++- .../util/NetAccessors/Curl/CurlURLInputStream.hpp | 2 ++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp index 5ed659389..2980dc211 100644 --- a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp +++ b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.cpp @@ -160,7 +160,20 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP while(fBufferHeadPtr == fBuffer) { int runningHandles = 0; - readMore(&runningHandles); + try + { + readMore(&runningHandles); + } + catch(const MalformedURLException&) + { + cleanup(); + throw; + } + catch(const NetAccessorException&) + { + cleanup(); + throw; + } if(runningHandles == 0) break; } @@ -174,18 +187,31 @@ CurlURLInputStream::CurlURLInputStream(const XMLURL& urlSource, const XMLNetHTTP CurlURLInputStream::~CurlURLInputStream() { + cleanup(); +} + + +void CurlURLInputStream::cleanup() +{ + if (!fMulti ) + return; + // Remove the easy handle from the multi stack curl_multi_remove_handle(fMulti, fEasy); // Cleanup the easy handle curl_easy_cleanup(fEasy); + fEasy = NULL; // Cleanup the multi handle curl_multi_cleanup(fMulti); + fMulti = NULL; if(fContentType) fMemoryManager->deallocate(fContentType); + fContentType = NULL; if(fHeadersList) curl_slist_free_all(fHeadersList); + fHeadersList = NULL; } diff --git a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp index f75857b92..3900d4db5 100644 --- a/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp +++ b/src/xercesc/util/NetAccessors/Curl/CurlURLInputStream.hpp @@ -61,6 +61,8 @@ private : CurlURLInputStream(const CurlURLInputStream&); CurlURLInputStream& operator=(const CurlURLInputStream&); + void cleanup(); + static size_t staticWriteCallback(char *buffer, size_t size, size_t nitems, --------------------------------------------------------------------- To unsubscribe, e-mail: c-dev-unsubscr...@xerces.apache.org For additional commands, e-mail: c-dev-h...@xerces.apache.org