[cmake-developers] [CMake 0015589]: Crash when fetching larger data file with External Data on Windows

Mantis Bug Tracker mantis at public.kitware.com
Wed May 27 16:26:52 EDT 2015


The following issue has been SUBMITTED. 
====================================================================== 
http://www.cmake.org/Bug/view.php?id=15589 
====================================================================== 
Reported By:                Martyn Gigg
Assigned To:                
====================================================================== 
Project:                    CMake
Issue ID:                   15589
Category:                   CMake
Reproducibility:            always
Severity:                   crash
Priority:                   normal
Status:                     new
====================================================================== 
Date Submitted:             2015-05-27 16:26 EDT
Last Modified:              2015-05-27 16:26 EDT
====================================================================== 
Summary:                    Crash when fetching larger data file with External
Data on Windows
Description: 
We have been using the external data mechanism with great success for several
months. 

Recently, an 800Mb file was added to our test data and on Windows cmake crashes
with a std::bad_alloc during a curl callback. The download works fine on Linux
and Mac OS X.

The full stack trace from Visual Studio is:

>	msvcr110d.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo
* pThrowInfo) Line 152	C++
 	msvcr110d.dll!operator new(unsigned int size) Line 63	C++
 	cmake.exe!std::_Allocate<char>(unsigned int _Count, char * __formal) Line
28	C++
 	cmake.exe!std::allocator<char>::allocate(unsigned int _Count) Line 591	C++
 	cmake.exe!std::_Wrap_alloc<std::allocator<char> >::allocate(unsigned int
_Count) Line 877	C++
 	cmake.exe!std::vector<char,std::allocator<char> >::_Insert<char
*>(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<char> > >
_Where, char * _First, char * _Last, std::forward_iterator_tag __formal) Line
1316	C++
 	cmake.exe!std::vector<char,std::allocator<char> >::insert<char
*>(std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<char> > >
_Where, char * _First, char * _Last) Line 1262	C++
 	cmake.exe!`anonymous namespace'::cmFileCommandCurlDebugCallback(void *
__formal, curl_infotype __formal, char * chPtr, unsigned int size, void * data)
Line 2519	C++
 	cmake.exe!showit(SessionHandle * data, curl_infotype type, char * ptr,
unsigned int size) Line 608	C
 	cmake.exe!Curl_debug(SessionHandle * data, curl_infotype type, char * ptr,
unsigned int size, connectdata * conn) Line 661	C
 	cmake.exe!Curl_readwrite(connectdata * conn, unsigned char * done) Line 1208	C
 	cmake.exe!Transfer(connectdata * conn) Line 1819	C
 	cmake.exe!Curl_perform(SessionHandle * data) Line 2378	C
 	cmake.exe!curl_easy_perform(void * curl) Line 480	C
 	cmake.exe!cmFileCommand::HandleDownloadCommand(const
std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > > & args) Line 2946	C++
 	cmake.exe!cmFileCommand::InitialPass(const
std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > > & args, cmExecutionStatus & __formal) Line 83	C++
 	cmake.exe!cmCommand::InvokeInitialPass(const
std::vector<cmListFileArgument,std::allocator<cmListFileArgument> > & args,
cmExecutionStatus & status) Line 68	C++
 	cmake.exe!cmMakefile::ExecuteCommand(const cmListFileFunction & lff,
cmExecutionStatus & status) Line 418	C++
 	cmake.exe!cmWhileFunctionBlocker::IsFunctionBlocked(const cmListFileFunction &
lff, cmMakefile & mf, cmExecutionStatus & inStatus) Line 73	C++
 	cmake.exe!cmMakefile::IsFunctionBlocked(const cmListFileFunction & lff,
cmExecutionStatus & status) Line 2833	C++
 	cmake.exe!cmMakefile::ExecuteCommand(const cmListFileFunction & lff,
cmExecutionStatus & status) Line 386	C++
 	cmake.exe!cmFunctionHelperCommand::InvokeInitialPass(const
std::vector<cmListFileArgument,std::allocator<cmListFileArgument> > & args,
cmExecutionStatus & inStatus) Line 179	C++
 	cmake.exe!cmMakefile::ExecuteCommand(const cmListFileFunction & lff,
cmExecutionStatus & status) Line 418	C++
 	cmake.exe!cmForEachFunctionBlocker::IsFunctionBlocked(const cmListFileFunction
& lff, cmMakefile & mf, cmExecutionStatus & inStatus) Line 57	C++
 	cmake.exe!cmMakefile::IsFunctionBlocked(const cmListFileFunction & lff,
cmExecutionStatus & status) Line 2833	C++
 	cmake.exe!cmMakefile::ExecuteCommand(const cmListFileFunction & lff,
cmExecutionStatus & status) Line 386	C++
 	cmake.exe!cmFunctionHelperCommand::InvokeInitialPass(const
std::vector<cmListFileArgument,std::allocator<cmListFileArgument> > & args,
cmExecutionStatus & inStatus) Line 179	C++
 	cmake.exe!cmMakefile::ExecuteCommand(const cmListFileFunction & lff,
cmExecutionStatus & status) Line 418	C++
 	cmake.exe!cmIfFunctionBlocker::IsFunctionBlocked(const cmListFileFunction &
lff, cmMakefile & mf, cmExecutionStatus & inStatus) Line 140	C++
 	cmake.exe!cmMakefile::IsFunctionBlocked(const cmListFileFunction & lff,
cmExecutionStatus & status) Line 2833	C++
 	cmake.exe!cmMakefile::ExecuteCommand(const cmListFileFunction & lff,
cmExecutionStatus & status) Line 386	C++
 	cmake.exe!cmMakefile::ReadListFile(const char * filename_in, const char *
external_in, std::basic_string<char,std::char_traits<char>,std::allocator<char>
> * fullPath, bool noPolicyScope) Line 699	C++
 	cmake.exe!cmake::ReadListFile(const
std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > > & args, const char * path) Line 551	C++
 	cmake.exe!cmake::SetCacheArgs(const
std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > > & args) Line 501	C++
 	cmake.exe!cmake::Run(const
std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char>
>,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char>
> > > & args, bool noconfigure) Line 2516	C++
 	cmake.exe!do_cmake(int ac, char * * av) Line 532	C++
 	cmake.exe!main(int ac, char * * av) Line 343	C++
 	cmake.exe!__tmainCRTStartup() Line 536	C
 	cmake.exe!mainCRTStartup() Line 377	C
 	kernel32.dll!74ed336a()	Unknown
 	ntdll.dll!772292b2()	Unknown
 	ntdll.dll!77229285()	Unknown

The insert line in cmFileCommand.cxx::cmFileCommandCurlDebugCallback causes a
memory allocation error.

Steps to Reproduce: 
I have placed an isolated test project at
https://github.com/martyngigg/external-data-win32-crash that reproduces the
error using one of our large files.

Running cmake on the project and then building with

msbuild ExternalDataTest.sln

will reproduce the issue.
====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2015-05-27 16:26 Martyn Gigg    New Issue                                    
======================================================================



More information about the cmake-developers mailing list