[MSVC8][BUG] AV in CAtlRegExp
От: Alexander G Украина  
Дата: 10.12.08 08:48
Оценка: 58 (1) +1
#include <atlbase.h>
#include <atlstr.h>
#include <atlrx.h>

int _tmain(int argc, _TCHAR* argv[])
{
  // Допустим у нас имеется выделенная память
  char * p = (char*)::VirtualAlloc(0, 16384, MEM_COMMIT, PAGE_READWRITE);
  DWORD old;
  //  , а следующая страница недоступна
  ::VirtualProtect(p + 8192, 8192, PAGE_NOACCESS, &old);

  // В конце строка
  char * s = p + 8192 - 8;
  // нулевой длинны
  *s = '\0';
  // а после неё - ненулевой мусор
  memcpy(s + 1, "abcdefg", 7);
  // такая cтрока вполне валидна
  printf("An empty string '%s'", s);

  // но вот CAtlRegExp на ней падает
  CAtlRegExp<CAtlRECharTraitsA> rx;
  rx.Parse("aaaaaabbbbcccc");
  CAtlREMatchContext<CAtlRECharTraitsA> ctx;
  rx.Match(s, &ctx);
  return 0;
}
Русский военный корабль идёт ко дну!
Re: [MSVC8][BUG] AV in CAtlRegExp
От: Кодт Россия  
Дата: 10.12.08 09:57
Оценка:
Здравствуйте, Alexander G, Вы писали:

Вот ведь не поленился!
А отдебажить?
Перекуём баги на фичи!
Re: [MSVC8][BUG] AV in CAtlRegExp
От: Vain Россия google.ru
Дата: 10.12.08 10:23
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG> // такая cтрока вполне валидна

AG> printf("An empty string '%s'", s);
Интересно, почему это не упало до?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: [MSVC8][BUG] AV in CAtlRegExp
От: Alexander G Украина  
Дата: 10.12.08 11:06
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Alexander G, Вы писали:


К>Вот ведь не поленился!


Я не виноват, оно само пришло
В конструктор ATL::CStringA пришли ((char*)0, 0) , был выделен буфер по адресу 0x04048ff8. Меджер памяти стандартный, Windows XP.
https://winqual.microsoft.com рулит.

К>А отдебажить?


А лень. Я лучше CAtlRegExp выкину, столько альтернатив: regex, xpressive, CoCreate("VBScript.RegExp"), spirit,.. а ещё функция strnicmp, через которую всё самому можно сделать
Русский военный корабль идёт ко дну!
Re[3]: [MSVC8][BUG] AV in CAtlRegExp
От: Vain Россия google.ru
Дата: 10.12.08 11:57
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>А лень. Я лучше CAtlRegExp выкину, столько альтернатив: regex, xpressive, CoCreate("VBScript.RegExp"), spirit,.. а ещё функция

AG>strnicmp, через которую всё самому можно сделать
Забыли ещё про DEELX
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: [MSVC8][BUG] AV in CAtlRegExp
От: Alexander G Украина  
Дата: 10.12.08 12:23
Оценка:
Здравствуйте, Vain, Вы писали:

V>Забыли ещё про DEELX


Не знал. А ещё вот http://www.pcre.org/ . И ещё http://research.microsoft.com/projects/greta/

А вот бенчмарки http://www.boost.org/doc/libs/1_37_0/libs/regex/doc/vc71-performance.html
http://research.microsoft.com/projects/greta/regex_perf.html

Поэтому починять CAtlRegExp смысла нет. Тем более, может в 9ке или 10ке уже починили.
Русский военный корабль идёт ко дну!
Re[5]: [MSVC8][BUG] AV in CAtlRegExp
От: Vain Россия google.ru
Дата: 10.12.08 13:31
Оценка:
Здравствуйте, Alexander G, Вы писали:

V>>Забыли ещё про DEELX

AG>Не знал.
Вот ещё
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: [MSVC8][BUG] AV in CAtlRegExp
От: Vain Россия google.ru
Дата: 10.12.08 13:56
Оценка:
Здравствуйте, Vain, Вы писали:

V>>>Забыли ещё про DEELX

AG>>Не знал.
V>Вот ещё
И ещё
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: [MSVC8][BUG] AV in CAtlRegExp
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 11.12.08 04:49
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Поэтому починять CAtlRegExp смысла нет. Тем более, может в 9ке или 10ке уже починили.


CAtlRegExp вместе с AtlServer из 9-ки выкинули вообще, AtlServer (и в нем CAtlRegExp) теперь живут отдельно на codeplex.com — http://www.codeplex.com/AtlServer/Thread/View.aspx?ThreadId=27699

з.ы. в исходниках CAtlRegExp кстати ни строчки не поменялось
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.