github / github/codeql

LGTM.com - false positive when raising Optional guarded by flag

Open
#3,066 0 comments 0 reactions 0 assignees View on GitHub
false-positive Python
Dominant language
CodeQL
Stars
10.1k
Forks
2.1k
Avg merge
2d 15h
Merged PRs (30d)
141

Description

**Description of the false positive**

LGTM complains that the ``raise exc_val`` will raise a ``NoneType`` (which would be wrong indeed). However, the type is actually ``exc_val: Optional[BaseException]`` with a flag ``reraise_exc`` indicating whether ``exc_val`` is actually filled. The critical code section cannot be entered unless ``exc_val`` actually contains a valid value.

A simplified version of the code in question (unrelated parts removed) looks like this. Note that ``reraise_exc`` and ``exc_val`` are always set together.

```
reraise_exc = False
exc_type = exc_val = tb = ...
for callback in callbacks:
try:
if callback(exc_type, exc_val, tb):
reraise_exc = False
exc_type = exc_val = tb = None
except BaseException as exc:
reraise_exc = True
exc_type, exc_val, tb = type(exc), exc, exc.__traceback__
if reraise_exc:
raise exc_val
```

**URL to the alert on the project page on LGTM.com**

https://lgtm.com/projects/g/maxfischer2781/asyncstdlib/snapshot/0ad1b5599b80c4beae23cd5252c7a04203238fca/files/asyncstdlib/contextlib.py#x3f56861048e9ce14:1

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.