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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 13.05.2011 19:41
Сообщение #2


a.k.a. volvo877
*****

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

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


Цитата
И что с этим делать?
Ничего с этим сделать нельзя. Кроме как надеяться, что между получением размера и получением текста тебе не подсунут данные, вызывающие переполнение. Ну, или не использовать эти сообщения/макросы.

Что интересно, 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, но репорт закрыт, вышел уже добрый десяток новых версий, а воз и ныне там...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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