Discussion:
ASAN билд валится на сохранении сообщений
(слишком старое сообщение для ответа)
Nil A
2023-10-24 15:16:40 UTC
Permalink
Hello, 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/asan_interceptors.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/x86_64-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/asan_new_delete.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/x86_64-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/asan_new_delete.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/x86_64-linux-gnu/libc.so.6+0x21f44)

SUMMARY: AddressSanitizer: strcpy-param-overlap
../../../../src/libsanitizer/asan/asan_interceptors.cc:429 in
__interceptor_strcpy
==31203==ABORTING

Best Regards, Nil
Vitaliy Aksyonov
2023-10-24 06:56:50 UTC
Permalink
Привет, 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ши...
Nil A
2023-10-25 02:06:50 UTC
Permalink
Hello, 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
Nil A
2023-10-25 02:37:48 UTC
Permalink
Hello, 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
Vitaliy Aksyonov
2023-10-25 04:08:08 UTC
Permalink
Привет, 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.

... Нет повести печальнее на свете, чем повесть о миньете в туалете..
Loading...