![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Порядок действий такой:
Сначала посылаем сообщение LB_GETTEXTLEN, чтобы узнать длину текста и i-ой строчке. Потом посылаем сообщение LB_GETTEXT для копирования в специально заготовленный с учётом этой длины буфер. В ВЦЛ тоже ровно так и делается. Но что меня напрягло. Вторая часть (копирование в буфер) не умеет принимать параметр "максимальная длина буфера". То есть она просто копирует до встречи с нулевым символом. А это значит, что если между узнаванием длины и копированием текста произошло что-то с этим ListBox, например, текст в i-ой строчке удлинился, то получится пресловутое переполнение буфера! Насколько мои опасения оправданы (ну может там блокировка встроена против такого, мало ли, или копируется не больше байт, чем полученно во время последнего LB_GETTEXTLEN), и как с этим делом бороться? Насколько я видел в ВЦЛ, там нет блокировки компонента на время взятия текста. -------------------- |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата И что с этим делать? Ничего с этим сделать нельзя. Кроме как надеяться, что между получением размера и получением текста тебе не подсунут данные, вызывающие переполнение. Ну, или не использовать эти сообщения/макросы.Что интересно, GetWindowText, значит, проверяет длину буфера (The buffer that will receive the text. If the string is as long or longer than the buffer, the string is truncated and terminated with a null character), а для других методов получения текста, этого сделать не догадались. На Embarcadero QualityCentral, кстати, писали об этих уязвимостях еще для версии D6, но репорт закрыт, вышел уже добрый десяток новых версий, а воз и ныне там... |
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 4:50 |