Martin Vogel
6a343a7bce
test(similarity): cover the empty-graph qsort null base ( #1367 )
...
The production guard for #1367 — collect_fp_entries only sorting when
count > 1 — is on main, but nothing exercises it. A fix without a test is a
fix that can be silently undone, and this one is unusually easy to undo:
removing the guard produces no visible symptom on most lanes.
Adds the missing case: a graph with zero Function/Method nodes, where the
entry array is never allocated and the null base would reach qsort.
The test comment records WHERE the test binds, because that turned out to be
the interesting part. Removing the guard again:
macOS 25 passed (Apple libc does not mark qsort
nonnull, so there is no UB to see)
Linux ASan/UBSan, recovering 25 passed (prints "null pointer passed as
argument 1", then keeps going)
Linux UBSan, trapping exit 1 (process aborts — the RED)
So the assertions here are the behavioural half (empty graph → rc 0, no
SIMILAR_TO edges), and the UB half is caught by the trap-UBSan leg alone.
Both were measured on ubuntu-arm64 in each direction. Spelling that out in
the test keeps a future reader from checking it on a recovering lane, seeing
green, and concluding the null-base guard is still there when it is not.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com >
2026-08-06 18:33:13 +02:00
..
2026-07-10 09:12:40 +00:00
2026-08-03 01:51:30 +02:00
2026-07-28 17:03:01 +02:00
2026-06-05 21:53:25 +02:00
2026-06-05 21:53:25 +02:00
2026-07-13 01:50:03 +02:00
2026-03-15 22:37:34 +01:00
2026-07-28 22:49:22 +02:00
2026-07-31 22:02:19 +02:00
2026-08-01 17:36:21 +04:00
2026-05-30 18:26:44 +02:00
2026-07-11 03:28:32 +02:00
2026-06-29 09:45:28 -06:00
2026-07-22 17:48:20 +02:00
2026-08-03 01:47:35 +02:00
2026-07-18 15:52:50 +02:00
2026-08-05 17:18:17 +02:00
2026-07-13 01:50:02 +02:00
2026-07-14 21:13:52 +02:00
2026-07-13 02:00:32 +02:00
2026-07-14 21:13:52 +02:00
2026-04-01 23:22:44 +02:00
2026-08-04 16:37:06 +02:00
2026-06-06 22:16:04 +02:00
2026-07-18 15:26:38 +02:00
2026-07-23 17:36:00 +02:00
2026-07-18 15:52:50 +02:00
2026-08-05 23:27:48 +02:00
2026-07-29 17:05:10 +02:00
2026-07-21 15:32:15 +02:00
2026-07-21 15:32:15 +02:00
2026-07-31 01:53:49 +02:00
2026-07-18 11:48:59 +02:00
2026-08-04 19:15:11 +02:00
2026-07-18 01:26:08 +02:00
2026-07-18 01:26:08 +02:00
2026-07-18 01:26:08 +02:00
2026-07-21 15:32:15 +02:00
2026-07-23 17:36:00 +02:00
2026-06-23 06:38:45 +09:00
2026-06-23 06:38:45 +09:00
2026-03-25 09:28:11 +01:00
2026-07-10 09:12:40 +00:00
2026-07-18 15:52:50 +02:00
2026-07-18 15:52:50 +02:00
2026-06-07 12:35:53 +02:00
2026-06-08 22:55:23 +02:00
2026-08-04 16:37:06 +02:00
2026-07-16 01:21:45 +02:00
2026-06-05 21:53:25 +02:00
2026-07-02 00:37:52 +02:00
2026-08-06 03:30:32 +02:00
2026-07-18 15:52:50 +02:00
2026-06-05 21:53:25 +02:00
2026-08-01 01:29:20 +02:00
2026-06-07 19:13:01 +02:00
2026-06-07 19:13:01 +02:00
2026-06-07 19:13:01 +02:00
2026-06-27 16:23:26 +02:00
2026-06-07 20:05:24 +02:00
2026-06-07 20:05:24 +02:00
2026-06-27 16:23:26 +02:00
2026-07-08 00:05:19 +05:30
2026-07-03 20:16:39 +02:00
2026-05-21 22:52:16 +02:00
2026-07-24 16:08:42 +02:00
2026-08-06 00:33:34 +02:00
2026-08-05 23:27:48 +02:00
2026-08-04 04:58:44 +02:00
2026-07-17 22:32:53 +02:00
2026-07-19 00:42:19 +02:00
2026-06-22 22:04:31 +02:00
2026-07-18 13:48:06 +02:00
2026-06-02 18:52:37 +02:00
2026-07-18 15:52:50 +02:00
2026-07-18 15:52:50 +02:00
2026-07-18 15:52:50 +02:00
2026-07-31 03:42:43 +02:00
2026-07-18 14:38:07 +02:00
2026-06-28 13:05:05 +02:00
2026-07-18 15:52:50 +02:00
2026-03-15 22:37:34 +01:00
2026-08-06 00:11:37 +02:00
2026-07-18 01:26:08 +02:00
2026-06-08 22:55:23 +02:00
2026-07-18 15:52:50 +02:00
2026-08-06 01:02:02 +02:00
2026-07-26 00:55:24 +02:00
2026-06-12 02:17:39 +02:00
2026-07-29 17:05:10 +02:00
2026-08-03 17:44:52 +02:00
2026-07-24 16:08:42 +02:00
2026-07-08 19:13:25 +02:00
2026-07-03 19:57:01 +02:00
2026-07-18 15:52:50 +02:00
2026-07-18 15:52:50 +02:00
2026-08-03 20:26:03 +02:00
2026-07-21 15:32:15 +02:00
2026-07-18 01:26:08 +02:00
2026-07-18 01:26:08 +02:00
2026-07-23 17:36:00 +02:00
2026-05-09 15:44:09 +02:00
2026-05-09 14:16:15 +02:00
2026-07-18 15:52:50 +02:00
2026-07-10 21:07:11 +02:00
2026-07-30 03:45:33 +02:00
2026-06-23 13:52:08 -03:00
2026-07-18 15:52:50 +02:00
2026-07-18 15:52:50 +02:00
2026-08-03 15:42:32 +02:00
2026-07-18 11:48:59 +02:00
2026-06-24 03:15:36 +02:00
2026-08-05 23:27:48 +02:00
2026-07-18 01:26:08 +02:00
2026-08-06 18:33:13 +02:00
2026-06-28 21:57:35 -06:00
2026-07-29 10:22:19 +02:00
2026-07-25 00:37:05 +02:00
2026-07-13 11:43:00 +03:00
2026-07-18 13:31:18 +02:00
2026-07-19 12:35:58 +05:30
2026-03-20 20:32:38 +01:00
2026-08-01 01:29:20 +02:00
2026-07-03 20:16:39 +02:00
2026-08-03 18:41:49 +02:00
2026-07-17 22:32:53 +02:00
2026-07-13 01:48:29 +02:00
2026-03-24 23:48:23 +01:00
2026-06-24 20:33:52 +05:30
2026-07-21 15:32:15 +02:00
2026-03-24 23:48:23 +01:00
2026-07-18 15:52:50 +02:00
2026-06-10 12:11:02 +02:00
2026-07-21 15:32:15 +02:00
2026-07-23 00:53:41 +02:00
2026-04-06 14:34:07 +02:00
2026-07-28 17:03:01 +02:00
2026-07-23 00:53:41 +02:00
2026-07-28 17:03:01 +02:00
2026-06-05 21:53:25 +02:00
2026-07-29 21:18:58 +02:00
2026-07-27 23:05:16 +02:00
2026-08-06 02:56:55 +02:00
2026-08-06 00:33:34 +02:00
2026-06-06 19:48:48 +02:00
2026-07-29 23:50:53 +02:00
2026-08-06 01:58:22 +02:00
2026-03-24 23:48:23 +01:00
2026-04-15 23:56:03 +02:00