﻿# V5306\. OWASP\. The original exception object was swallowed\. Cause of original exception could be lost\.

Анализатор обнаружил ситуацию, когда оригинальная информация об исключении была утеряна при повторной генерации из блока 'catch'\. Из\-за этого ошибки превращаются в трудноотлаживаемые\.

Отсутствие чёткой идентификации возникшей проблемы несёт дополнительные риски с точки зрения безопасности\. Недостаточное логирование и мониторинг \(в том числе обнаружение проблем\) выделены в отдельную категорию рисков в OWASP Top 10 Application Security Risks 2017: [A10:2017\-Insufficient Logging & Monitoring](https://owasp.org/www-project-top-ten/2017/A10_2017-Insufficient_Logging%2526Monitoring)\.

Рассмотрим пример некорректного кода:

```cpp
try {
  sb.append((char) Integer.parseInt(someString));  
  ....
} catch (NumberFormatException e) {
  throw new IllegalArgumentException();
}
```

В данном случае перехваченное исключение хотели перебросить и не передали полезную информацию в виде сообщения и stacktrace\.

Корректный вариант кода:

```cpp
try {
  sb.append((char) Integer.parseInt(someString));
  ....
} catch (NumberFormatException e) {
  throw new IllegalArgumentException(e);
}
```

В исправленном варианте исходное исключение передаётся в качестве внутреннего, что полностью сохраняет информацию об исходной ошибке\.

Другим вариантом исправления может являться выбрасывание исключения с сообщением пользователю:

```cpp
try {
  sb.append((char) Integer.parseInt(someString));
  ....
} catch (NumberFormatException e) {
  throw new IllegalArgumentException(
    "String " + someString + " is not number"
  );
}
```

В данной ситуации стек оригинальной ошибки был утерян, но описанная информация в новом исключении внесёт большую ясность при отладке этого кода\.

Если потеря информации об исключении является ожидаемым поведением, то вы можете заменить имена 'catch'\-параметров на "ignore" или "expected", и исключение выдаваться не будет\.