bpmailsend: Indeterminate exit behavior when using nonexistent DTPC profile
- 主要言語
- C
- スター
- 4
- フォーク
- 0
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
## Environment
commit: eed3b8220ab841a12c4bb146febe79c347652d7
```
Fri Mar 7 07:18:46 UTC 2025
ION-OPEN-SOURCE-4.1.3s
Python 3.11.11
FreeBSD amd64
```
## Description
When calling `bpmailsend` through Python's `subprocess.run()`, using `capture_output=True` will unpredictably hang or pass when `dtpc_send()` fails. This is why the error message is not checked in [test_send_unknown_profile](https://github.com/250MHz/bpmail/blob/eed3b8220ab841a12c4bb146febe79c347652d76/test/test_bpmail.py#L67).
## Test
Start ION with test/loopback.rc:
```
$ meson setup build
$ cd build
$ meson compile
$ ionstart -I ../test/loopback.rc
```
In the Python interpreter, when it works it shows:
```
>>> subprocess.run(['src/bpmailsend', '34', 'ipn:1.129'], input=b'blah\0', capture_output=True)
CompletedProcess(args=['src/bpmailsend', '34', 'ipn:1.129'], returncode=1, stdout=b'', stderr=b'could not send payload\n')
```
When it hangs, sending SIGINT shows:
```
>>> subprocess.run(['src/bpmailsend', '34', 'ipn:1.129'], input=b'blah\0', capture_output=True)
^CTraceback (most recent call last):
File "", line 1, in
File "/usr/local/lib/python3.11/subprocess.py", line 550, in run
stdout, stderr = process.communicate(input, timeout=timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/subprocess.py", line 1209, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/subprocess.py", line 2115, in _communicate
ready = selector.select(timeout)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/selectors.py", line 415, in select
fd_event_list = self._selector.poll(timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyboardInterrupt
```
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
評価
この issue はまだ評価されていません。