Сообщение Безопасность std::ostream (std::locale) от 15.01.2018 18:48
Изменено 15.01.2018 18:50 DDDX
Безопасность std::ostream (std::locale)
Есть DLL (компилируется VC++ v10-v15), которая работает в дикой (многопоточной) природе. Она и сама потоки запускает.
Понадобилось внутри написать свой конвертер CLSID->TEXT.
Сделал это через, скажем так, аналог ostringstream.
Вот уже неделю смотрю на этот код и меня терзают сомнения.
Некоторое время назад, один из пользователей этой DLL умудрился завалить процесс
Я сейчас полез в исходники std::ostream — похоже он тоже использует std::locale
То есть, похоже я могу снова наступить на грабли с std::locale.
И добавить тормоза, потому что это "_Ploc = new locale;" далеко не бесплатно. Но сейчас речь не про тормоза.
---
За 18 лет у меня ни разу не было проблем с std::ostream (ни с VC, ни с BCB).
Но вот сейчас у меня сомнения — может ну его, и написать этот конвертер GUID->TEXT полностью самостоятельно?
Все как то спокойней спать буду.
Что скажете?
Понадобилось внутри написать свой конвертер CLSID->TEXT.
Сделал это через, скажем так, аналог ostringstream.
Как-то так | |
| |
Вот уже неделю смотрю на этот код и меня терзают сомнения.
Некоторое время назад, один из пользователей этой DLL умудрился завалить процесс
Автор: Коваленко Дмитрий
Дата: 11.10.17
(со своим сервером) через "моя DLL"->std::locale->setlocale.Дата: 11.10.17
Я сейчас полез в исходники std::ostream — похоже он тоже использует std::locale
c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ios | |
| |
То есть, похоже я могу снова наступить на грабли с std::locale.
И добавить тормоза, потому что это "_Ploc = new locale;" далеко не бесплатно. Но сейчас речь не про тормоза.
---
За 18 лет у меня ни разу не было проблем с std::ostream (ни с VC, ни с BCB).
Но вот сейчас у меня сомнения — может ну его, и написать этот конвертер GUID->TEXT полностью самостоятельно?
Все как то спокойней спать буду.
Что скажете?
Безопасность std::ostream (std::locale)
Есть DLL (компилируется VC++ v10-v15), которая работает в дикой (многопоточной) природе. Она и сама потоки запускает.
Понадобилось внутри написать свой конвертер GUID->TEXT.
Сделал это через, скажем так, аналог ostringstream.
Вот уже неделю смотрю на этот код и меня терзают сомнения.
Некоторое время назад, один из пользователей этой DLL умудрился завалить процесс
Я сейчас полез в исходники std::ostream — похоже он тоже использует std::locale
То есть, похоже я могу снова наступить на грабли с std::locale.
И добавить тормоза, потому что это "_Ploc = new locale;" далеко не бесплатно. Но сейчас речь не про тормоза.
---
За 18 лет у меня ни разу не было проблем с std::ostream (ни с VC, ни с BCB).
Но вот сейчас у меня сомнения — может ну его, и написать этот конвертер GUID->TEXT полностью самостоятельно?
Все как то спокойней спать буду.
Что скажете?
Понадобилось внутри написать свой конвертер GUID->TEXT.
Сделал это через, скажем так, аналог ostringstream.
Как-то так | |
| |
Вот уже неделю смотрю на этот код и меня терзают сомнения.
Некоторое время назад, один из пользователей этой DLL умудрился завалить процесс
Автор: Коваленко Дмитрий
Дата: 11.10.17
(со своим сервером) через "моя DLL"->std::locale->setlocale.Дата: 11.10.17
Я сейчас полез в исходники std::ostream — похоже он тоже использует std::locale
c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\ios | |
| |
То есть, похоже я могу снова наступить на грабли с std::locale.
И добавить тормоза, потому что это "_Ploc = new locale;" далеко не бесплатно. Но сейчас речь не про тормоза.
---
За 18 лет у меня ни разу не было проблем с std::ostream (ни с VC, ни с BCB).
Но вот сейчас у меня сомнения — может ну его, и написать этот конвертер GUID->TEXT полностью самостоятельно?
Все как то спокойней спать буду.
Что скажете?