Index: apps/traincascade/imagestorage.cpp =================================================================== --- apps/traincascade/imagestorage.cpp (revision 2836) +++ apps/traincascade/imagestorage.cpp (working copy) @@ -33,7 +33,10 @@ pos = _filename.rfind('/'); dlmrt = '/'; } - dirname = _filename.substr(0, pos) + dlmrt; + if(pos == String::npos) + dirname = ""; + else + dirname = _filename.substr(0, pos) + dlmrt; while( !file.eof() ) { std::getline(file, str); @@ -132,10 +135,22 @@ if( !file ) return false; short tmp = 0; - fread( &count, sizeof( count ), 1, file ); - fread( &vecSize, sizeof( vecSize ), 1, file ); - fread( &tmp, sizeof( tmp ), 1, file ); - fread( &tmp, sizeof( tmp ), 1, file ); + int rfields = fread( &count, sizeof( count ), 1, file ); + if(rfields != 1){ + CV_Error_(CV_StsParseError, ("wrong file format for %s\n", _filename.c_str())); + } + rfields = fread( &vecSize, sizeof( vecSize ), 1, file ); + if(rfields != 1){ + CV_Error_(CV_StsParseError, ("wrong file format for %s\n", _filename.c_str())); + } + rfields = fread( &tmp, sizeof( tmp ), 1, file ); + if(rfields != 1){ + CV_Error_(CV_StsParseError, ("wrong file format for %s\n", _filename.c_str())); + } + rfields = fread( &tmp, sizeof( tmp ), 1, file ); + if(rfields != 1){ + CV_Error_(CV_StsParseError, ("wrong file format for %s\n", _filename.c_str())); + } base = sizeof( count ) + sizeof( vecSize ) + 2*sizeof( tmp ); if( feof( file ) ) return false; @@ -149,8 +164,14 @@ { CV_Assert( _img.rows * _img.cols == vecSize ); uchar tmp = 0; - fread( &tmp, sizeof( tmp ), 1, file ); - fread( vec, sizeof( vec[0] ), vecSize, file ); + int rfields = fread( &tmp, sizeof( tmp ), 1, file ); + if(rfields != 1){ + CV_Error(CV_StsParseError, "wrong file format for positive examples file\n"); + } + rfields = fread( vec, sizeof( vec[0] ), vecSize, file ); + if(rfields != vecSize){ + CV_Error(CV_StsParseError, "wrong file format for positive examples file\n"); + } if( feof( file ) || last++ >= count ) return false;