Примеры ошибок, обнаруженных с помощью диагностики V1022
V1022. Exception was thrown by pointer. Consider throwing it by value instead.
LibrePCB
V1022 CWE-755 An exception was thrown by pointer. Consider throwing it by value instead. cmdremoveselectedschematicitems.cpp 143
bool CmdRemoveSelectedSchematicItems::performExecute() {
....
throw new LogicError(__FILE__, __LINE__);
....
}
Haiku Operation System
V1022 An exception was thrown by pointer. Consider throwing it by value instead. gensyscallinfos.cpp 316
int
main(int argc, char** argv)
{
try {
return Main().Run(argc, argv);
} catch (Exception& exception) { // <=
fprintf(stderr, "%s\n", exception.what());
return 1;
}
}
int Run(int argc, char** argv)
{
....
_ParseSyscalls(argv[1]);
....
}
void _ParseSyscalls(const char* filename)
{
ifstream file(filename, ifstream::in);
if (!file.is_open())
throw new IOException(string("Failed to open `") + filename + "'."); // <=
....
}
Similar errors can be found in some other places:
- V1022 An exception was thrown by pointer. Consider throwing it by value instead. gensyscallinfos.cpp 347
- V1022 An exception was thrown by pointer. Consider throwing it by value instead. gensyscallinfos.cpp 413
FaCT++
V1022 [CWE-755] An exception was thrown by pointer. Consider throwing it by value instead. ExtendedDataRange.cpp 44
static bool
checkDataRelation ( const DataTypeReasoner& Op1,
const DataTypeReasoner& Op2, int op )
{
switch (op)
{
....
default:
throw new EFaCTPlusPlus("Illegal operation in checkDataRelation()");
}
}
Qt Creator
V1022 [CWE-755] An exception was thrown by pointer. Consider throwing it by value instead. celliterator.cpp 59
CellIterator &CellIterator::operator-=(int n)
{
....
if (m_pos - n < 0)
throw new std::runtime_error("-= n too big!");
}