#1
|
|||
|
|||
ASAN билд валится на сохранении сообщений
Nil A написал(а) к All в Oct 23 18:16:40 по местному времени:
Нello, All! Я пользуюсь санитайзерной версией голдеда уже какое-то время. Сейчас по w невозможно сохранить даже на терминале в 80 символов и простое сообщение без выделений, без URL. ==31203==ERROR: AddressSanitizer: strcpy-param-overlap: memory ranges [0x6230000014d9,0x6230000014da) and [0x6230000014d9, 0x6230000014da) overlap #0 0x7efc6a234dc9 in _interceptor_strcpy ../../../../src/libsanitizer/asan/asaninterceptors.cc:429 #1 0x81a4bb in TemplateToText(int, GMsg, GMsg*, char const, int) /home/fido/src/golded-plus/golded3/getpls.cpp:355 #2 0x5a9b35 in SaveLines(int, char const, GMsg, int, bool) /home/fido/src/golded-plus/golded3/gedoit.cpp:89 #3 0x5adc3b in WriteMsgs /home/fido/src/golded-plus/golded3/gedoit.cpp:333 #4 0x5ae9c4 in WriteMsg(GMsg*) /home/fido/src/golded-plus/golded3/gedoit.cpp:409 #5 0x7beda6 in Reader() /home/fido/src/golded-plus/golded3/geread.cpp:963 #6 0x6c7755 in main /home/fido/src/golded-plus/golded3/gemain.cpp:54 #7 0x7efc688e2f44 in _libc_start_main (/lib/x8664-linux-gnu/libc.so.6+0x21f44) #8 0x408fb8 (/home/fido/src/golded-plus/build_asan/golded3/golded+0x408fb8) 0x6230000014d9 is located 5081 bytes inside of 6536-byte region [0x623000000100,0x623000001a88) allocated by thread T0 here: #0 0x7efc6a2a622f in operator new(unsigned long) ../../../../src/libsanitizer/asan/asannewdelete.cc:104 #1 0x7b337e in Reader() /home/fido/src/golded-plus/golded3/geread.cpp:155 #2 0x6c7755 in main /home/fido/src/golded-plus/golded3/gemain.cpp:54 #3 0x7efc688e2f44 in _libc_start_main (/lib/x8664-linux-gnu/libc.so.6+0x21f44) 0x6230000014d9 is located 5081 bytes inside of 6536-byte region [0x623000000100,0x623000001a88) allocated by thread T0 here: #0 0x7efc6a2a622f in operator new(unsigned long) ../../../../src/libsanitizer/asan/asannewdelete.cc:104 #1 0x7b337e in Reader() /home/fido/src/golded-plus/golded3/geread.cpp:155 #2 0x6c7755 in main /home/fido/src/golded-plus/golded3/gemain.cpp:54 #3 0x7efc688e2f44 in _libc_start_main (/lib/x8664-linux-gnu/libc.so.6+0x21f44) SUMMARY: AddressSanitizer: strcpy-param-overlap ../../../../src/libsanitizer/asan/asaninterceptors.cc:429 in __interceptorstrcpy ==31203==ABORTING Best Regards, Nil --- GoldED+/LNX 1.1.5 |
#2
|
|||
|
|||
Re: ASAN билд валится на сохранении сообщений
Vitaliy Aksyonov написал(а) к Nil A в Oct 23 09:56:50 по местному времени:
Привет, Nil! 24 Oct 23 18:16, ты писал(а) All: NA> Я пользуюсь санитайзерной версией голдеда уже какое-то время. Сейчас NA> по w невозможно сохранить даже на терминале в 80 символов и простое NA> сообщение без выделений, без URL. Я это тоже поймал. Конкретно эта ошибка некритична, но переделать все же надо. Когда дойдут руки. Я тут один, а вас вон сколько. :) NA> ==31203==ERROR: AddressSanitizer: strcpy-param-overlap: memory ranges Best regards, Vitaliy Aksyonov. ... Восьмое чyдо света занимает шестyю часть сyши... --- GoldED+/LNX 1.1.5-b20231021 |
#3
|
|||
|
|||
ASAN билд валится на сохранении сообщений
Nil A написал(а) к Vitaliy Aksyonov в Oct 23 05:06:50 по местному времени:
Нello, Vitaliy! Tuesday October 24 2023 09:56, from Vitaliy Aksyonov -> Nil A: NA>> Сейчас по w невозможно сохранить даже на терминале в 80 символов NA>> и простое сообщение без выделений, без URL. VA> Я это тоже поймал. Конкретно эта ошибка некритична, но переделать все VA> же надо. Когда дойдут руки. Я тут один, а вас вон сколько. :) Кстати, strcpy() на memmove() перебивать не надо, там ваще поентеры одинаковые. (gdb) bt #0 TemplateToText (mode=120, msg=0x623000000100, oldmsg=0x623000000100, tpl=0x62e00004315e "", origarea=3) at /home/fido/src/golded-plus/golded3/getpls.cpp:355 #1 0x00000000005a9b36 in SaveLines (mode=117, savefile=0x62e000045182 "/home/fido/outfile/a", msg=0x623000000100, margin=79, clip=false) at /home/fido/src/golded-plus/golded3/gedoit.cpp:89 #2 0x00000000005adc3c in WriteMsgs (msg=0x623000000100) at /home/fido/src/golded-plus/golded3/gedoit.cpp:333 #3 0x00000000005ae9c5 in WriteMsg (msg=0x623000000100) at /home/fido/src/golded-plus/golded3/gedoit.cpp:409 #4 0x00000000007beda7 in Reader () at /home/fido/src/golded-plus/golded3/geread.cpp:963 #5 0x00000000006c7756 in main (argc=2, argv=0x7fffffffe0b8) at /home/fido/src/golded-plus/golded3/gemain.cpp:54 (gdb) p oldmsg $1 = (GMsg *) 0x623000000100 (gdb) p msg $2 = (GMsg *) 0x623000000100 (gdb) list 350 351 // build @dpseudo 352 if(msg->to_me()) 353 strcpy(oldmsg->pseudoto, msg->pseudofrom); 354 else if(msg->to_you()) 355 strcpy(oldmsg->pseudoto, msg->pseudoto); 356 else 357 *(oldmsg->pseudoto) = NUL; 358 359 // build @opseudo Вот тут ваще noop должен быть. 355 strcpy(oldmsg->pseudoto, msg->pseudoto); Аааа.. теперь ясно почему он в венде не валится, потому что он там noop посути. Best Regards, Nil --- GoldED+/LNX 1.1.5 |
#4
|
|||
|
|||
ASAN билд валится на сохранении сообщений
Nil A написал(а) к Vitaliy Aksyonov в Oct 23 05:37:48 по местному времени:
Нello, Vitaliy! Wednesday October 25 2023 05:06, from Nil A -> Vitaliy Aksyonov: NA>>> Сейчас по w невозможно сохранить даже на терминале в 80 символов NA>>> и простое сообщение без выделений, без URL. VA>> Я это тоже поймал. Конкретно эта ошибка некритична, но переделать VA>> все же надо. Когда дойдут руки. Я тут один, а вас вон сколько. :) Когда читаешь такие вот функции, как TemplateToText(), то расхочевается чинить голдед. Я не совсем понимаю что они там делают, а делают они там явно (по SOLID терминологии) не Single Responsibility Principle. Но я могу предложить весьма безопасный, быстрый, и короткий фикс, даже не вникая что там происходит, просто одним условием вокруг обложить. И у меня всё работает. diff --git a/golded3/getpls.cpp b/golded3/getpls.cpp --- 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); NA> Кстати, strcpy() на memmove() перебивать не надо, там ваще поентеры NA> одинаковые. NA> (gdb) bt NA> #0 TemplateToText (mode=120, msg=0x623000000100, NA> oldmsg=0x623000000100, tpl=0x62e00004315e "", origarea=3) at NA> /home/fido/src/golded-plus/golded3/getpls.cpp:355 #1 NA> 0x00000000005a9b36 in SaveLines (mode=117, savefile=0x62e000045182 NA> "/home/fido/outfile/a", msg=0x623000000100, margin=79, clip=false) at NA> /home/fido/src/golded-plus/golded3/gedoit.cpp:89 #2 NA> 0x00000000005adc3c in WriteMsgs (msg=0x623000000100) at NA> /home/fido/src/golded-plus/golded3/gedoit.cpp:333 #3 NA> 0x00000000005ae9c5 in WriteMsg (msg=0x623000000100) at NA> /home/fido/src/golded-plus/golded3/gedoit.cpp:409 #4 NA> 0x00000000007beda7 in Reader () at NA> /home/fido/src/golded-plus/golded3/geread.cpp:963 #5 NA> 0x00000000006c7756 in main (argc=2, argv=0x7fffffffe0b8) at NA> /home/fido/src/golded-plus/golded3/gemain.cpp:54 (gdb) p oldmsg $1 = NA> (GMsg ) 0x623000000100 (gdb) p msg $2 = (GMsg ) 0x623000000100 (gdb) NA> list 350 351 // build @dpseudo 352 NA> if(msg->to_me()) 353 strcpy(oldmsg->pseudoto, NA> msg->pseudofrom); 354 else if(msg->to_you()) 355 NA> strcpy(oldmsg->pseudoto, msg->pseudoto); 356 else 357 NA> *(oldmsg->pseudoto) = NUL; 358 359 // build @opseudo NA> Вот тут ваще noop должен быть. NA> 355 strcpy(oldmsg->pseudoto, msg->pseudoto); Best Regards, Nil --- GoldED+/LNX 1.1.5 |
#5
|
|||
|
|||
Re: ASAN билд валится на сохранении сообщений
Vitaliy Aksyonov написал(а) к Nil A в Oct 23 07:08:08 по местному времени:
Привет, Nil! 25 Oct 23 05:37, ты писал(а) мне: NA>>>> Сейчас по w невозможно сохранить даже на терминале в 80 NA>>>> символов и простое сообщение без выделений, без URL. VA>>> Я это тоже поймал. Конкретно эта ошибка некритична, но VA>>> переделать все же надо. Когда дойдут руки. Я тут один, а вас вон VA>>> сколько. :) NA> Когда читаешь такие вот функции, как TemplateToText(), то NA> расхочевается чинить голдед. Я не совсем понимаю что они там делают, а NA> делают они там явно (по SOLID терминологии) не Single Responsibility NA> Principle. Но я могу предложить весьма безопасный, быстрый, и короткий NA> фикс, даже не вникая что там происходит, просто одним условием вокруг NA> обложить. И у меня всё работает. "Безопасный, быстрый и короткий фикс" называется костыль. Там в консерватории править надо. [...skipped...] Best regards, Vitaliy Aksyonov. ... Нет повести печальнее на свете, чем повесть о миньете в туалете.. --- GoldED+/LNX 1.1.5-b20231021 |