Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Похоже, еще лик нашел: ConvertBSTRToStr (число прочтений - 8630 )
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Похоже, еще лик нашел: ConvertBSTRToStr
23. Апреля 2008 :: 17:22
Печать  
Судя по этой статье: http://www.codeproject.com/KB/bugs/bug_in__bstr_t_amp__varia.aspx?fid=3473&df=90...

Строку, полученную после вызова _com_util::ConvertBSTRToString нужно явно освобождать через delete []. Это следует из приведенного там ассемблерного кода для этой функции. А в 1С++ есть (кое-где, где скоро не будет) вызовы этой функции без последующего delete.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #1 - 23. Апреля 2008 :: 20:29
Печать  
Я как раз реализацию в первом ремаппере wchar_t оттуда брал.

Ты лучше вот что скажи: откуда в обсуждении с заголовком "Original C++ code" (забавное обсуждение Улыбка ) lusores исходный код взял?
Что-то я не нашел такого: "%\crt\src\Compiler Support\comutil.cpp".
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #2 - 23. Апреля 2008 :: 21:59
Печать  
kms писал(а) 23. Апреля 2008 :: 20:29:
Ты лучше вот что скажи: откуда в обсуждении с заголовком "Original C++ code" (забавное обсуждение Улыбка ) lusores исходный код взял?
Что-то я не нашел такого: "%\crt\src\Compiler Support\comutil.cpp".

Да, ответ автора прикалывает Улыбка
Я так понял, что "Compiler Support" была в VC7.
Вот эта ссылка, последняя строка: http://www.pollusbrodeur.com/MediaCatalog/Find.asp?query=compiler

Сама по себе страница левая, но отображаемый там путь наводит на размышления Улыбка

На всякий случай здесь запишу:
Цитата:
\Program Files\Microsoft Visual Studio .NET\Vc7\crt\src\Compiler Support
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #3 - 23. Апреля 2008 :: 22:01
Печать  
И еще ссылка по этому поводу: http://rsdn.ru/forum/message/398848.flat.aspx
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #4 - 23. Апреля 2008 :: 22:18
Печать  
есть такая лика.
я уж насколько чайник, но нарывался..
  
Наверх
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #5 - 24. Апреля 2008 :: 03:31
Печать  
забавно...
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #6 - 24. Апреля 2008 :: 11:06
Печать  
Поверим насчет утечки? Писать в багзиллу?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #7 - 24. Апреля 2008 :: 11:11
Печать  
100% текло.

можно проверить простым тестом:

Код
Выбрать все
void TestComLeak(void)
{
	BSTR bstrText = ::SysAllocString(L"TestComLeak");

	// leaks free
	//
	//char* pStr = _com_util::ConvertBSTRToString(bstrText);
	//CString strUtil(pStr);
	//delete[] pStr;
	//
	// leaks free

	// leaks
	//
	CString strUtil = _com_util::ConvertBSTRToString(bstrText);
	//
	// leaks

	SysFreeString(bstrText);
}

...
{
	_CrtMemState s1, s2, s3;
	_CrtMemCheckpoint(&s1);

	TestComLeak();

	_CrtMemCheckpoint(&s2);

	if(_CrtMemDifference(&s3, &s1, &s2))
		_CrtMemDumpStatistics(&s3);
}
 

  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #8 - 28. Апреля 2008 :: 06:12
Печать  
http://www.1cpp.ru/bugs/show_bug.cgi?id=3781
Открыл и закрыл баг.
Кирилл исправил в 2.5 и в 2.0.3, я по его коду - в icpp.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #9 - 28. Апреля 2008 :: 06:17
Печать  
artbear писал(а) 28. Апреля 2008 :: 06:12:
http://www.1cpp.ru/bugs/show_bug.cgi?id=3781
Открыл и закрыл баг.
Кирилл исправил в 2.5 и в 2.0.3, я по его коду - в icpp.

В icpp OLE DB можно было не исправлять.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #10 - 28. Апреля 2008 :: 06:33
Печать  
Uzhast писал(а) 28. Апреля 2008 :: 06:17:
artbear писал(а) 28. Апреля 2008 :: 06:12:
http://www.1cpp.ru/bugs/show_bug.cgi?id=3781
Открыл и закрыл баг.
Кирилл исправил в 2.5 и в 2.0.3, я по его коду - в icpp.

В icpp OLE DB можно было не исправлять.

?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #11 - 28. Апреля 2008 :: 06:36
Печать  
artbear писал(а) 28. Апреля 2008 :: 06:33:
Uzhast писал(а) 28. Апреля 2008 :: 06:17:
artbear писал(а) 28. Апреля 2008 :: 06:12:
http://www.1cpp.ru/bugs/show_bug.cgi?id=3781
Открыл и закрыл баг.
Кирилл исправил в 2.5 и в 2.0.3, я по его коду - в icpp.

В icpp OLE DB можно было не исправлять.

?

Потому что скоро ConvertBSTRToStr там вообще не будет. И вообще, попридержи пока правки OLE DB на этой неделе.

PS. Наверное, зря я про этот баг рассказал. Надо было подождать несколько дней Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #12 - 28. Апреля 2008 :: 06:50
Печать  
Кстати, Compiler Support есть действительно только в vs70.
И весьма невыдающихся размеров: Улыбка

comraise.cpp
comsupp.cpp
comutil.cpp
invkerr.cpp
invkprxy.cpp

По поводу текущего решения - для icpp точно не годится.
Во-первых, очень просто сделать нормальную реализацию функций ConvertStringToBSTR и ConvertBSTRToString.
Во-вторых, если этих функций там не будет - так тем более от этого никто не пострадает.

Uzhast писал(а) 28. Апреля 2008 :: 06:36:
PS. Наверное, зря я про этот баг рассказал. Надо было подождать несколько дней Улыбка

Нет нет товаришч. Шоу маст гоуон! Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #13 - 28. Апреля 2008 :: 14:30
Печать  
Uzhast писал(а) 28. Апреля 2008 :: 06:36:
Надо было подождать несколько дней Улыбка

тебя на сквозь видно, как и друга твоего.
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Похоже, еще лик нашел: ConvertBSTRToStr
Ответ #14 - 28. Апреля 2008 :: 14:57
Печать  
spock писал(а) 28. Апреля 2008 :: 14:30:
Uzhast писал(а) 28. Апреля 2008 :: 06:36:
Надо было подождать несколько дней Улыбка

тебя на сквозь видно, как и друга твоего.

Куляй на хур. Я всего лишь имел в виду, что если бы я не сообщал о баге, Артуру не пришлось бы делать лишнюю работу. А то получится еще как с тобой. Человек сделал мощный рефакторинг, а ты все пох#рил.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать