Mercurial > prosody-hg
view .lua-format @ 14181:6fb6e383123f 13.0
util.signal: Fix signalfd closure on non-Linux systems
The loop was incorrect for 0-indexed arrays. It started at signalfd_num, which
is the total number of signalfds, and decremented to 1 (condition was >0). So
if 1 signalfd was registered, it would check only signalfds[1]. At capacity
(32 signalfds) it would read past the end of the array. In every case, it
would always skip the entry at position [0], leading to a leak.
The swap-with-tail removal of the matched item used the post-decrement
operator, leading to accessing the array slot just beyond the tail.
Finally, it didn't break after finding a match. Probably harmless, but there
isn't expected to be more than a single entry per fd, as far as I can tell.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 25 May 2026 16:02:39 +0100 |
| parents | 81ae5e12550f |
| children |
line wrap: on
line source
align_args: false align_parameter: false align_table_field: true break_after_functioncall_lp: false break_after_functiondef_lp: false break_after_operator: false break_after_table_lb: true break_before_functioncall_rp: false break_before_functiondef_rp: false break_before_table_rb: true chop_down_kv_table: true chop_down_parameter: false chop_down_table: true column_limit: 150 column_table_limit: 120 continuation_indent_width: 1 double_quote_to_single_quote: false extra_sep_at_table_end: true indent_width: 1 keep_simple_control_block_one_line: true keep_simple_function_one_line: true line_breaks_after_function_body: 1 line_separator: input single_quote_to_double_quote: false spaces_around_equals_in_field: true spaces_before_call: 1 spaces_inside_functioncall_parens: false spaces_inside_functiondef_parens: false spaces_inside_table_braces: true tab_width: 1 table_sep: ";" use_tab: true
