GOLDED.DEVEL------------- < Пред. | След. > -- < @ > -- < Сообщ. > -- < Эхи > --
 Nп/п : 47 из 87
 От   : Nil A                               2:5015/46         14 фев 24 19:10:56
 К    : Vitaliy Aksyonov                                      14 фев 24 19:13:02
 Тема : Changes in golded+ sources
----------------------------------------------------------------------------------
                                                                                 
@MSGID: 2:5015/46 65cce656
@REPLY: 2:5015/46 65cbb8ed
@CHRS: CP866 2
@TZUTC: 0300
@TID: hpt/lnx 1.9.0-cur 2021-05-15
Hello, Vitaliy!

Tuesday February 13 2024 21:44, from Nil A -> Vitaliy Aksyonov:

 NA> Вот сейчас из мастера собрал, если сохранить сообщение в файл, то
 NA> санитайзер орёт, что копирование с оверлапом.

 NA> ==25185==ERROR: AddressSanitizer: strcpy-param-overlap: memory ranges
 NA> [0x623000001559,0x62300000155a) and [0x623000001559, 0x62300000155a)
 NA> overlap
 NA>     #0 0x7f98858a7dc9 in __interceptor_strcpy
 NA> ../../../../src/libsanitizer/asan/asan_interceptors.cc:429
 NA>     #1 0x726fe2 in TemplateToText(int, GMsg*, GMsg*, char const*, int)
 NA> /home/fido/src/golded-plus/golded3/getpls.cpp:361

 Это старый баг, я предлагал тупой фикс, см. ниже, но ты сказал,
что знаешь лучше решение, так что ждём.

diff --git a/golded3/getpls.cpp b/golded3/getpls.cpp
index c537471..8b32e90 100644
--- a/golded3/getpls.cpp
+++ b/golded3/getpls.cpp
 @@ -348,21 +348,24 @@ int TemplateToText(int mode, GMsg* msg, GMsg*
oldmsg, const char* tpl, int origa
     else
         *(msg->pseudofrom) = NUL;

-    // build @dpseudo
-    if(msg->to_me())
-        strcpy(oldmsg->pseudoto, msg->pseudofrom);
-    else if(msg->to_you())
-        strcpy(oldmsg->pseudoto, msg->pseudoto);
-    else
-        *(oldmsg->pseudoto) = NUL;
+    if (oldmsg != msg)
+    {
+        // build @dpseudo
+        if(msg->to_me())
+            strcpy(oldmsg->pseudoto, msg->pseudofrom);
+        else if(msg->to_you())
+            strcpy(oldmsg->pseudoto, msg->pseudoto);
+        else
+            *(oldmsg->pseudoto) = NUL;

-    // build @opseudo
-    if(msg->by_me())
-        strcpy(oldmsg->pseudofrom, msg->pseudofrom);
-    else if(msg->by_you())
-        strcpy(oldmsg->pseudofrom, msg->pseudoto);
-    else
-        *(oldmsg->pseudofrom) = NUL;
+        // build @opseudo
+        if(msg->by_me())
+            strcpy(oldmsg->pseudofrom, msg->pseudofrom);
+        else if(msg->by_you())
+            strcpy(oldmsg->pseudofrom, msg->pseudoto);
+        else
+            *(oldmsg->pseudofrom) = NUL;
+    }

     throw_release(msg->txt);

Best Regards, Nil
--- GoldED+/LNX 1.1.5
 * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)
SEEN-BY: 104/117 460/58 463/68 5005/49 5015/46 255
5019/40 5020/715 848 1042
SEEN-BY: 5020/4441 12000 5023/24 5025/121 5030/49
1081 5053/58 5058/104
SEEN-BY: 6078/80
@PATH: 5015/46 5020/1042 4441



   GoldED+ VK   │                                                 │   09:55:30    
                                                                                
В этой области больше нет сообщений.

Остаться здесь
Перейти к списку сообщений
Перейти к списку эх