Preserve UTF-8 boundaries in DM peer names

This commit is contained in:
evgeny committed 2026-10-26 17:27:18 +01:00
1 parent fa76447f53
commit d09ed0316f
4 files changed
+235 -8

No files matched your search

+3 -2
View File
@@ -34,6 +34,7 @@ extern "C" {
#define DM_MSG_SIG_SIZE 64
#define DM_DATA_MAX 1024
#define DM_RECEIPT_SIZE 136
#define DM_PEER_NAME_MAX 63 /* UTF-8 байты без NUL; сохраняются только целые code points. */
/* Вычислить полную длину канонического тела из его заголовка.
* Возвращает 1 и *out_len, либо 0 если буфер мал/повреждён (выход не меняется).
@@ -78,6 +79,7 @@ void dm_core_destroy(struct UTUN_INSTANCE* inst);
* ещё нет, выводит conv_id/ключи. Подключение для передачи медиа принадлежит media.
* Снимает hidden без смены поколения; публикует CONV_UPDATED с текущим поколением.
* Ключи обязательны, peer_name/source_ch_id могут быть NULL; переданные ключи пира проверяет вызывающий.
* Имя ограничено DM_PEER_NAME_MAX байтами по границе UTF-8; некорректный суффикс отбрасывается с WARN.
* Возвращает 0 при успехе, <0 при ошибке.
* Отказ чтения/проверки ключей не создаёт беседу, не меняет её поля/hidden и не выдаёт CONV_UPDATED.
* Создание разрешено только после успешного SELECT без строки; существующие seq сохраняются. */
@@ -104,8 +106,7 @@ void dm_cancel_pending_history(struct UTUN_INSTANCE* inst, const char* conv);
/* До 200 видимых бесед по last_ts DESC: [{conv_id,peer_node_id,peer_name,last_ts,out_seq,in_seq,generation}].
* buf вмещает JSON и NUL; 0 и *out_len без NUL при успехе, -1 при ошибке. Все вызовы в uasync.
* Известный дефект: имя может быть обрезано внутри UTF-8 в dm_start/load, и результат с кодом0 будет
* некорректным UTF-8 JSON. См. doc/dm_audit_findings.txt, раздел8. */
* Имя из БД либо nodes нормализуется по правилам dm_start; снимок не меняет сохранённые строки. */
int dm_list_conversations_json(struct UTUN_INSTANCE* inst, char* buf, size_t buf_size, size_t* out_len);
/* Сообщения беседы в JSON: расшифрованное содержимое, статусы доставки и медиа.