Bug 10127 - Проблема при использовании boost
Summary: Проблема при использовании boost
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: boost-regex (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Damir Shayhutdinov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-10-13 10:59 MSD by Ilia Korolyov
Modified: 2008-09-10 21:35 MSD (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ilia Korolyov 2006-10-13 10:59:36 MSD
Актуальный сизиф. gcc 4.1.1 20060928 (ALT Linux, build 4.1.1-alt9)
Есть следующий код


int main( int argc, char** argv )
{
        try
        {
                boost::regex
re("(\\w+):\\/\\/(([^:]+?)(:(.+))?@)?([^:\\/]+)(:(\\d+))?((\\/.+?)*)(\\?(.+?))?(#(.+))?");
                boost::match_results<std::string::const_iterator> what;

                std::string first("http://breeze@abc.ru/index.php?v=2008#123");

                boost::regex::locale_type loc("ru_RU.cp1251");
//              re.imbue( loc );

                for( int i=0; i<5; ++i )
                {
                        if(
!boost::regex_match(boost::algorithm::trim_copy(first), what, re) ) continue;
                        cerr << "res =  " << what[12].str() << endl;

                        string tmp = boost::algorithm::trim_copy(first);
                        if( !boost::regex_match(tmp, what, re) ) continue;
                        cerr << "res2 =  " << what[12].str() << endl;
                }

                re.imbue( loc );
        }
        catch (std::exception& ex)
        {
                cerr << "UGLY STANDART ERROR: " << ex.what() << endl;
                return -1;
        }
        catch(...)
        {
                cerr << "UGLY ERROR: UNHANDLED EXCEPTION" << endl;
                return -1;
        }

        return 0;
}

Данные код просто парсит URL при помощи boost::regex, есть две проблемы:
1. Строки "res=..." и "res2=..." должны быть одинаковыми, реально получается

res =  keywords=%CC%E5%E3%E0%F4%EE%ED&pad_i╧╟│ь╥╟│ь╥194.67.27.46&version=2008
res2 = keywords=%CC%E5%E3%E0%F4%EE%ED&pad_id=190905&ip=194.67.27.46&version=2008

т.е. в строке "res=..." присутствует явный мусор

2. Раскоментирование строки re.imbue( loc ); приводит к появлению "Исключение в
операции с плавающей точкой"

PS Возможно я обратился не по адресу - подскажите, куда следует обратиться
Steps to Reproduce:
make && run
Comment 1 Ilia Korolyov 2006-10-13 11:03:54 MSD
Прошу прощения - слишком упростил, реально должно быть например так

std::string
first("http://breeze@abc.ru/banner.jsp?keywords=%CC%E5%E3%E0%F4%EE%ED&id=1&ip=1.1.1.1&version=1#123");

при этом получается
res =  keywords=%CC%E5%E3%E0%F4%EE%ED&iи╟Aь╥╟Aь╥.1&version=1
res2 =  keywords=%CC%E5%E3%E0%F4%EE%ED&id=1&ip=1.1.1.1&version=1
Comment 2 Ilia Korolyov 2006-10-16 19:41:44 MSD
Первая часть проблемы, скорее всего связана не с boost, а с gcc(Bug 10144), но
вторая часть с imbue() остаётся
Comment 3 Damir Shayhutdinov 2006-10-16 20:04:14 MSD
Пока времени нет подвердить или опровергнуть, до конца недели обещаю 
разобраться.
Comment 4 Ilia Korolyov 2006-11-22 10:59:25 MSK
Что-то прояснилось?
Comment 5 Damir Shayhutdinov 2007-07-29 22:15:24 MSD
На новом бусте воспроизводится?
Comment 6 Damir Shayhutdinov 2008-03-29 14:20:06 MSK
В новой версии были исправления на эту тему.