Houmgaor
8b2667f7a0
fix(handlers): harden gacha_items and boost time limit ACK paths
...
Both bugs surfaced when running protbot against a live Erupe instance.
LoadColumnWithDefault now treats an empty bytea ('\x', len 0) the same
as NULL. The postgres driver returns a non-nil empty slice for empty
bytea, so the prior `data == nil` check let a zero-byte slice reach
handleMsgMhfReceiveGachaItem, which forwarded it to the client as a
malformed gacha_items response. The MHF client interprets a zero-byte
count field as a protocol error and crashes the gacha menu, matching
the #175 symptom class. The handler also gains a defensive fallback
for len(data) == 0 in case another caller hits the same edge.
handleMsgMhfGetBoostTimeLimit was sending two ACKs for a single
request: doAckBufSucceed with the real payload, then an unconditional
doAckSimpleSucceed on the same ack handle. The second ACK was dead on
arrival (the handle was already consumed) but is a latent protocol
bug. Drop it and update the regression test that was asserting the
buggy 2-packet behavior.
2026-04-06 18:04:10 +02:00
..
2026-03-17 19:03:43 +01:00
2026-02-22 15:47:21 +01:00
2026-02-27 17:29:32 +01:00
2026-02-22 15:47:21 +01:00
2026-02-27 17:29:32 +01:00
2026-03-17 19:21:55 +01:00
2026-03-23 10:57:01 +01:00
2026-02-20 19:50:28 +01:00
2026-02-23 21:28:30 +01:00
2026-02-20 21:18:40 +01:00
2026-02-23 18:09:08 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-21 13:20:15 +01:00
2024-03-15 00:54:18 +00:00
2026-04-06 18:04:10 +02:00
2026-04-06 18:04:10 +02:00
2026-02-21 13:20:15 +01:00
2026-03-19 10:57:09 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-03-21 19:38:16 +01:00
2026-03-23 10:15:25 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 18:24:54 +01:00
2026-03-17 19:21:55 +01:00
2026-03-19 10:57:09 +01:00
2026-02-24 13:55:49 +01:00
2026-02-22 18:55:31 +01:00
2026-03-18 12:09:44 +01:00
2026-03-18 12:09:44 +01:00
2026-04-06 16:22:23 +02:00
2026-04-06 16:16:05 +02:00
2026-03-18 23:19:25 +01:00
2026-03-10 11:28:11 +01:00
2026-04-06 18:04:10 +02:00
2026-02-24 14:13:20 +01:00
2026-02-24 13:55:49 +01:00
2026-03-05 16:39:15 +01:00
2026-03-02 19:43:11 +01:00
2026-02-26 23:41:44 +01:00
2026-02-27 11:33:25 +01:00
2026-02-27 11:33:25 +01:00
2026-02-16 22:19:44 +01:00
2026-02-24 14:13:20 +01:00
2026-03-02 19:43:11 +01:00
2026-02-16 22:19:44 +01:00
2026-03-06 00:15:53 +01:00
2026-03-05 18:00:30 +01:00
2026-03-03 18:04:33 +01:00
2026-02-26 23:41:44 +01:00
2026-02-20 22:14:48 +01:00
2026-03-19 10:57:09 +01:00
2026-02-20 22:18:46 +01:00
2026-02-27 11:33:13 +01:00
2026-03-19 10:57:09 +01:00
2026-02-24 15:34:51 +01:00
2026-03-19 14:35:38 +01:00
2026-03-19 14:35:38 +01:00
2026-02-20 21:18:40 +01:00
2026-02-24 14:13:20 +01:00
2026-02-24 00:05:56 +01:00
2026-03-23 22:20:32 +01:00
2026-03-23 22:20:32 +01:00
2026-03-19 10:57:09 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-22 16:05:25 +01:00
2026-03-17 19:03:43 +01:00
2026-02-21 13:20:15 +01:00
2026-02-26 23:41:44 +01:00
2026-04-06 16:45:56 +02:00
2026-03-19 10:57:09 +01:00
2026-03-23 10:57:01 +01:00
2026-02-16 22:19:44 +01:00
2026-03-19 10:57:09 +01:00
2026-03-19 10:57:09 +01:00
2026-03-23 10:57:01 +01:00
2026-02-22 18:55:31 +01:00
2026-02-21 14:16:58 +01:00
2026-02-26 23:41:44 +01:00
2026-02-18 21:39:13 +01:00
2026-02-26 23:41:44 +01:00
2026-02-20 21:18:40 +01:00
2026-03-23 22:20:32 +01:00
2026-03-23 22:20:32 +01:00
2026-03-17 19:11:59 +01:00
2026-03-23 22:20:32 +01:00
2026-03-19 10:57:09 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-20 18:58:32 +01:00
2026-02-18 21:48:08 +01:00
2026-02-27 11:33:13 +01:00
2026-02-21 13:39:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-16 22:19:44 +01:00
2026-03-23 11:06:50 +01:00
2026-02-21 13:39:44 +01:00
2026-03-23 22:00:06 +01:00
2026-03-05 23:05:55 +01:00
2026-03-18 12:14:31 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-04-06 18:04:10 +02:00
2026-04-06 18:04:10 +02:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-18 12:09:44 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-04-06 17:48:12 +02:00
2026-04-06 17:48:12 +02:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:42:03 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-18 12:09:44 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-21 19:38:16 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-23 10:57:01 +01:00
2026-04-06 17:48:12 +02:00
2026-03-18 11:35:31 +01:00
2026-03-18 11:35:31 +01:00
2026-02-27 11:33:25 +01:00
2026-03-10 11:28:11 +01:00
2026-03-10 11:28:11 +01:00
2026-02-24 14:13:20 +01:00
2026-02-24 00:05:56 +01:00
2026-02-24 16:07:37 +01:00
2026-02-24 16:07:37 +01:00
2026-02-23 19:34:30 +01:00
2026-03-23 11:06:50 +01:00
2026-04-06 17:48:12 +02:00
2026-02-21 13:20:15 +01:00
2026-02-17 17:59:00 +01:00
2026-03-23 11:06:50 +01:00
2026-03-06 00:15:53 +01:00
2026-04-06 17:48:12 +02:00