Skip to content

Commit

Permalink
/vsicurl/: try to solve random occurrence of invalid use of memory
Browse files Browse the repository at this point in the history
This should perhaps help fixing, or at least workarounding, the following
issue seen randomly on the gcc52_stdcpp14_sanitize Travis-CI target.

e.g on https://api.travis-ci.org/v3/job/351015753/log.txt

Running gdrivers/gdalhttp.py...
  TEST: http_1 ... success
ERROR 1: Range downloading not supported by this server!
ERROR 1: Request for 8-407 failed
  TEST: http_2 ... success
  TEST: http_3 ... success
ERROR 4: `/vsicurl/ftp://download.osgeo.org/gdal/data/gtiff/utm.tif' not recognized as a supported file format.
  TEST: http_4 ... HTTP service for ftp://download.osgeo.org/gdal/data/gtiff/utm.tif is down (HTTP Error: ftp error: 425 Security: Bad IP connecting.)
cannot open URL
skip
  TEST: http_5 ... success
ERROR 1: JSON parsing error: unexpected character (at offset 0)
  TEST: http_6 ... success
==31274==WARNING: AddressSanitizer failed to allocate 0x62d00019040f bytes
==31274==AddressSanitizer's allocator is terminating the process instead of returning 0
==31274==If you don't like this behavior set allocator_may_return_null=1
==31274==AddressSanitizer CHECK failed: ../../.././libsanitizer/sanitizer_common/sanitizer_allocator.cc:147 "((0)) != (0)" (0x0, 0x0)
    #0 0x7f3f527259f4  (/home/travis/build/OSGeo/gdal/install-gcc-5.2.0/lib64/libasan.so.2.0.0+0x9e9f4)
    #1 0x7f3f5272a453 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/home/travis/build/OSGeo/gdal/install-gcc-5.2.0/lib64/libasan.so.2.0.0+0xa3453)
    #2 0x7f3f526a7461  (/home/travis/build/OSGeo/gdal/install-gcc-5.2.0/lib64/libasan.so.2.0.0+0x20461)
    #3 0x7f3f527286d5  (/home/travis/build/OSGeo/gdal/install-gcc-5.2.0/lib64/libasan.so.2.0.0+0xa16d5)
    #4 0x7f3f526acb3d  (/home/travis/build/OSGeo/gdal/install-gcc-5.2.0/lib64/libasan.so.2.0.0+0x25b3d)
    #5 0x7f3f526adbd5  (/home/travis/build/OSGeo/gdal/install-gcc-5.2.0/lib64/libasan.so.2.0.0+0x26bd5)
    #6 0x7f3f5271e32e in realloc (/home/travis/build/OSGeo/gdal/install-gcc-5.2.0/lib64/libasan.so.2.0.0+0x9732e)
    #7 0x7f3f3ea2a940 in VSIRealloc /home/travis/build/OSGeo/gdal/gdal/port/cpl_vsisimple.cpp:814
    #8 0x7f3f3e8e3958 in VSICurlHandleWriteFunc /home/travis/build/OSGeo/gdal/gdal/port/cpl_vsil_curl.cpp:839
    #9 0x7f3f2ff61442 in Curl_client_write (/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4+0x16442)
    #10 0x7f3f2ff8bc46 in Curl_pp_readresp (/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4+0x40c46)
    #11 0x7f3f2ff621ab  (/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4+0x171ab)
    #12 0x7f3f2ff64546  (/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4+0x19546)
    #13 0x7f3f2ff61bbf  (/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4+0x16bbf)
    #14 0x7f3f2ff61cd1  (/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4+0x16cd1)
    #15 0x7f3f2ff6776b in Curl_disconnect (/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4+0x1c76b)
    #16 0x7f3f2ff7c170 in curl_multi_cleanup (/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4+0x31170)
    #17 0x7f3f3e902c6b in ClearCache /home/travis/build/OSGeo/gdal/gdal/port/cpl_vsil_curl.cpp:2913
    #18 0x7f3f3e8fc9f7 in ~VSICurlFilesystemHandler /home/travis/build/OSGeo/gdal/gdal/port/cpl_vsil_curl.cpp:2564
    #19 0x7f3f3e8fcf23 in ~VSICurlFilesystemHandler /home/travis/build/OSGeo/gdal/gdal/port/cpl_vsil_curl.cpp:2569
    #20 0x7f3f3e9e4a02 in VSIFileManager::~VSIFileManager() /home/travis/build/OSGeo/gdal/gdal/port/cpl_vsil.cpp:1805
    #21 0x7f3f3e9e5baa in VSICleanupFileManager /home/travis/build/OSGeo/gdal/gdal/port/cpl_vsil.cpp:1966
    #22 0x7f3f3e533e42 in GDALDriverManager::~GDALDriverManager() /home/travis/build/OSGeo/gdal/gdal/gcore/gdaldrivermanager.cpp:262
    #23 0x7f3f3e53418d in GDALDriverManager::~GDALDriverManager() /home/travis/build/OSGeo/gdal/gdal/gcore/gdaldrivermanager.cpp:329
    #24 0x7f3f3e53a14e in GDALDestroyDriverManager /home/travis/build/OSGeo/gdal/gdal/gcore/gdaldrivermanager.cpp:898
    #25 0x7f3f27794ea3 in ffi_call_unix64 (/usr/lib/python2.7/lib-dynload/_ctypes.so+0x1aea3)
    #26 0x7f3f277948c4 in ffi_call (/usr/lib/python2.7/lib-dynload/_ctypes.so+0x1a8c4)
    #27 0x7f3f277852c1 in _ctypes_callproc (/usr/lib/python2.7/lib-dynload/_ctypes.so+0xb2c1)
    #28 0x7f3f27785aa1  (/usr/lib/python2.7/lib-dynload/_ctypes.so+0xbaa1)
    #29 0x4c2645 in PyObject_Call (/usr/bin/python2.7+0x4c2645)
    #30 0x537589 in PyEval_EvalFrameEx (/usr/bin/python2.7+0x537589)
    #31 0x5376f1 in PyEval_EvalFrameEx (/usr/bin/python2.7+0x5376f1)
    #32 0x5376f1 in PyEval_EvalFrameEx (/usr/bin/python2.7+0x5376f1)
    #33 0x53e2af in PyEval_EvalCodeEx (/usr/bin/python2.7+0x53e2af)
    #34 0x536c45 in PyRun_StringFlags (/usr/bin/python2.7+0x536c45)
    #35 0x53ecb4 in PyRun_SimpleStringFlags (/usr/bin/python2.7+0x53ecb4)
    #36 0x51e62d in Py_Main (/usr/bin/python2.7+0x51e62d)
    #37 0x7f3f504657ec in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x217ec)
    #38 0x41bad0  (/usr/bin/python2.7+0x41bad0)




git-svn-id: https://svn.osgeo.org/gdal/trunk/gdal@41669 f0d54148-0727-0410-94bb-9a71ac55c965
  • Loading branch information
rouault committed Mar 8, 2018
1 parent c74bbae commit 369d938
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions port/cpl_vsil_curl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1109,6 +1109,9 @@ vsi_l_offset VSICurlHandle::GetFileSize( bool bSetError )

MultiPerform(hCurlMultiHandle, hCurlHandle);

curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr);

if( headers != nullptr )
curl_slist_free_all(headers);

Expand Down Expand Up @@ -1529,6 +1532,9 @@ bool VSICurlHandle::DownloadRegion( const vsi_l_offset startOffset,

MultiPerform(hCurlMultiHandle, hCurlHandle);

curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr);

if( headers != nullptr )
curl_slist_free_all(headers);

Expand Down Expand Up @@ -2113,6 +2119,8 @@ int VSICurlHandle::ReadMultiRange( int const nRanges, void ** const ppData,
}

curl_multi_remove_handle(hMultiHandle, aHandles[iReq]);
curl_easy_setopt(aHandles[iReq], CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(aHandles[iReq], CURLOPT_WRITEFUNCTION, nullptr);
curl_easy_cleanup(aHandles[iReq]);
CPLFree(apszRanges[iReq]);
CPLFree(asWriteFuncData[iReq].pBuffer);
Expand Down Expand Up @@ -2231,6 +2239,9 @@ int VSICurlHandle::ReadMultiRangeSingleGet(

MultiPerform(hCurlMultiHandle, hCurlHandle);

curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr);

if( headers != nullptr )
curl_slist_free_all(headers);

Expand Down Expand Up @@ -5059,6 +5070,9 @@ bool VSIS3WriteHandle::InitiateMultipartUpload()
curl_easy_perform(hCurlHandle);
CPLHTTPRestoreSigPipeHandler(old_handler);

curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr);

curl_slist_free_all(headers);

long response_code = 0;
Expand Down Expand Up @@ -5198,6 +5212,9 @@ bool VSIS3WriteHandle::UploadPart()
curl_easy_perform(hCurlHandle);
CPLHTTPRestoreSigPipeHandler(old_handler);

curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr);

curl_slist_free_all(headers);

long response_code = 0;
Expand Down Expand Up @@ -5530,6 +5547,9 @@ bool VSIS3WriteHandle::DoSinglePartPUT()
curl_easy_perform(hCurlHandle);
CPLHTTPRestoreSigPipeHandler(old_handler);

curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr);

curl_slist_free_all(headers);

long response_code = 0;
Expand Down Expand Up @@ -6119,6 +6139,9 @@ int IVSIS3LikeFSHandler::DeleteObject( const char *pszFilename )
curl_easy_perform(hCurlHandle);
CPLHTTPRestoreSigPipeHandler(old_handler);

curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr);

curl_slist_free_all(headers);

long response_code = 0;
Expand Down Expand Up @@ -6261,6 +6284,9 @@ char** IVSIS3LikeFSHandler::GetFileList( const char *pszDirname,

MultiPerform(hCurlMultiHandle, hCurlHandle);

curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr);

if( headers != nullptr )
curl_slist_free_all(headers);

Expand Down Expand Up @@ -8194,6 +8220,9 @@ char** VSISwiftFSHandler::GetFileList( const char *pszDirname,

MultiPerform(hCurlMultiHandle, hCurlHandle);

curl_easy_setopt(hCurlHandle, CURLOPT_HEADERFUNCTION, nullptr);
curl_easy_setopt(hCurlHandle, CURLOPT_WRITEFUNCTION, nullptr);

if( headers != nullptr )
curl_slist_free_all(headers);

Expand Down

0 comments on commit 369d938

Please sign in to comment.