1. PHP / Говнокод #13807

    +161

    1. 1
    2. 2
    3. 3
    4. 4
    foreach (array('peer_id','port','downloaded','uploaded','left') as $x){
        if (!isset($x))
        err('', "Нет переменной - ".$x, 1);
    }

    Озадачился. Куда может пропасть $x?

    Запостил: AlexP, 18 Сентября 2013

    Комментарии (20) RSS

    • Надо вкладывать в код больше долларов.
      Ответить
    • В небытие, куда же еще?
      Ответить
    • Может быть же NULL, не?
      Ответить
      • Ну если его засунуть в array в строке 1 - да, может ;)
        Ответить
    • И откуда она может снова появиться в строке 3.

      Опять какой-то говноторрент-монитор?
      Ответить
      • > в строке 3
        В строке 3 как раз все нормально. Там же имя переменной показывают, а не ее значение. А в $x лежит одна из имен переменных, которые перечислены в array на первой строке.

        На правах кэпа:
        Косяк в том, что в строке 2 бакса не хватает, и isset проверяет не наличие переменных $peer_id, $port и т.п., а наличие самой переменной $x, которая всегда существует.
        Ответить
        • Двойного бакса? Так за него убивать надо.
          Ответить
          • Ну по смыслу кода он тут нужен. Как ты иначе проверишь переменные по списку?
            Ответить
            • А нахуя? Я бы уже передавал хешмассив и проверял в нем ключи.

              Асло, не знаток php. Есть там разница между отсутствием переменной и ее равенству null?
              Ответить
              • > Я бы уже передавал хешмассив и проверял в нем ключи.
                Да хрен его знает... Пути пыхера неисповедимы...

                > Есть там разница между отсутствием переменной и ее равенству null?
                При обычном обращении, емнип только в ворнинге (если нету - высрет ворнинг и запилит со значением null). А для isSet разницы нет, вернет false и там и там.
                Ответить
                • Меня терзают смутные сомнения что код написан для register_globals on, и переменные вытаскиваются из $_REQUEST.
                  Ответить
                  • > код написан для register_globals on
                    А вот за это точно надо убивать ;)
                    Ответить
                    • Да, возможность переопределять переменные скрипта из запроса - это сильно.
                      Ответить
                      • Ну на самом деле не переопределять. Эти переменные проставляются до старта скрипта, и поэтому переменные, описанные в скрипте, перетрут их.

                        Но все равно сраное говнище: в сочетании с пыхерскими манерами не читать ворнинги и забивать на неинициализированные переменные вполне можно сотворить уязвимость.
                        Ответить
                        • Это очень страшный код за который я был готов надавать по голове. Заглянул в него из-за тормозов при 5000 просмотрах в день на ВПС с 1 Гб ОЗУ и процессоре интел 2.8 ГГц.
                          Два подключения к БД в одном файле, куча ошибок в логах, насильственное включение register_globals и установка set_time_limit(0). А еще подавление всех ошибок при помощи @. А еще такой проверкой <? if(ini_get('short_open_tag') == 'no') die('text'); ?>
                          Ответить
                          • > А еще такой проверкой

                            Зачем жить, если шорт-тегов нет? Уйти в небытие, оставив записку с единственным словом: "text"...
                            Ответить
                            • > с единственным словом: "text"...
                              Фиг там... вывалить весь исходник в браузер :) Шорт теги же не пашут.
                              Ответить
                        • Какие "эти"?
                          Ответить

    Добавить комментарий