Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 4 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 06.02.2006
Откуда: Одесса
вот что мы имеем
Код:
AnsiString ProcessString(AnsiString const& str)
{
    if(str == EmptyStr)
        return EmptyStr;
    //string isn't empty so we can process it
    auto_ptr <char> buf(str.c_str());

    for(int i=0; i<str.Length(); i++)
    {
        if(((buf.get())[i] > 125) || ((buf.get())[i] < 0))
            (buf.get())[i]=' ';
    }

    buf.release();
    return str;
}

По рецензии в коде есть серьязная угроза безопасности кода... бьюсь 2 дня не могу ее найти...

_________________
Mom! Kitty's being a dildo!



Партнер
 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Я не работал с билдером и класс AnsiString не знаю, но:
1. Во-первых, на кой чёрт здесь нужен auto_ptr? Совершенно не к месту. (Решение --> обычный указатель)
2. Ты меняешь const-строку str по полученному указателю. (Решение --> сначала скопировать, потом менять)
3. Могут ли в строке встречаться 0? Если нет (да и если могут тоже), лучше использовать идиому итератора.

Короче говоря:
Код:
AnsiString ProcessString( AnsiString const& str )
{
    if ( str.Length() == 0 )
        return str;

    AnsiString pr_str( str );
    for ( char *it = pr_str.c_str(); *it != 0 /*или считать символы до Length()*/; ++it )
    {
        if ( *it & 0x80 || *it > 125 )
            *it = ' ';
    }
    return pr_str;
}


 

Member
Статус: Не в сети
Регистрация: 06.02.2006
Откуда: Одесса
Билли Бонс писал(а):
1. Во-первых, на кой чёрт здесь нужен auto_ptr? Совершенно не к месту.

я выложил сборную версию неск функций.... так как есть там он действительно не нужен.
спс. за ответ

_________________
Mom! Kitty's being a dildo!


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Sergey_H тут вообще-то undefined behavior, как раз с auto_ptr. По-стандарту у него в деструкторе delete, не delete[].
Да и как было сказано, не хорошо это, модифицировать const char *, которую возвращает c_str.

_________________
Ку ку


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 4 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan