![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Порядок действий такой:
Сначала посылаем сообщение LB_GETTEXTLEN, чтобы узнать длину текста и i-ой строчке. Потом посылаем сообщение LB_GETTEXT для копирования в специально заготовленный с учётом этой длины буфер. В ВЦЛ тоже ровно так и делается. Но что меня напрягло. Вторая часть (копирование в буфер) не умеет принимать параметр "максимальная длина буфера". То есть она просто копирует до встречи с нулевым символом. А это значит, что если между узнаванием длины и копированием текста произошло что-то с этим ListBox, например, текст в i-ой строчке удлинился, то получится пресловутое переполнение буфера! Насколько мои опасения оправданы (ну может там блокировка встроена против такого, мало ли, или копируется не больше байт, чем полученно во время последнего LB_GETTEXTLEN), и как с этим делом бороться? Насколько я видел в ВЦЛ, там нет блокировки компонента на время взятия текста. -------------------- |
![]() ![]() |
Гость |
![]()
Сообщение
#2
|
Гость ![]() |
> Ничего с этим сделать нельзя.
То есть глюк винды? > На Embarcadero QualityCentral, кстати, писали об этих уязвимостях еще для версии D6 То есть глюк дельфы? > Ну, или не использовать эти сообщения/макросы. А какие нужно использовать? Есть ли что-то вроде "блокировки окна"? Я без ВЦЛ обойдусь как-нибудь, если что. > Что интересно, GetWindowText, значит, проверяет длину буфера Ну дык потому что у сообщения WM_GETTEXT есть параметр, задающий максимальное кол-во копируемых символов. |
![]() ![]() |
![]() |
Текстовая версия | 10.07.2025 9:41 |