IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Взять текст из i-ой строчки ListBox, WinApi
TarasBer
сообщение 13.05.2011 13:20
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Порядок действий такой:
Сначала посылаем сообщение LB_GETTEXTLEN, чтобы узнать длину текста и i-ой строчке. Потом посылаем сообщение LB_GETTEXT для копирования в специально заготовленный с учётом этой длины буфер. В ВЦЛ тоже ровно так и делается.
Но что меня напрягло. Вторая часть (копирование в буфер) не умеет принимать параметр "максимальная длина буфера". То есть она просто копирует до встречи с нулевым символом. А это значит, что если между узнаванием длины и копированием текста произошло что-то с этим ListBox, например, текст в i-ой строчке удлинился, то получится пресловутое переполнение буфера!
Насколько мои опасения оправданы (ну может там блокировка встроена против такого, мало ли, или копируется не больше байт, чем полученно во время последнего LB_GETTEXTLEN), и как с этим делом бороться? Насколько я видел в ВЦЛ, там нет блокировки компонента на время взятия текста.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Гость
сообщение 13.05.2011 19:50
Сообщение #2


Гость






> Ничего с этим сделать нельзя.

То есть глюк винды?

> На Embarcadero QualityCentral, кстати, писали об этих уязвимостях еще для версии D6

То есть глюк дельфы?

> Ну, или не использовать эти сообщения/макросы.

А какие нужно использовать?
Есть ли что-то вроде "блокировки окна"?
Я без ВЦЛ обойдусь как-нибудь, если что.

> Что интересно, GetWindowText, значит, проверяет длину буфера

Ну дык потому что у сообщения WM_GETTEXT есть параметр, задающий максимальное кол-во копируемых символов.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 10.07.2025 9:41
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"