Support us

Нашли баг в PHP: перезапись последнего значения массива предпоследним при использовании foreach со ссылкой на значения массива

17 комментариев
Добавь в Google
Нашли баг в PHP: перезапись последнего значения массива предпоследним при использовании foreach со ссылкой на значения массива
Чтобы воспроизвести баг я написал вот такой небольшой пример:
" microtime(1), $i); //fill array with some examples 
} 

foreach ($a as &$b) {
//do nothing, with link on value '&'
}

foreach ($a as $b) {
//do nothing, without '&'
}

print_r($a); //LOOK AT LAST 2
По умолчанию в переборе foreach для значения создается копия элемента из массива, но если нам надо внести правки в исходные значения - можно создать ссылку на элемент массива. Суть проблемы - переменная AS из форича доступна в глобальном скоупе после конца цикла и содержит последний элемент перебора, в нашем случае ссылку на последний элемент массива. Используя это же имя переменной в следующем переборе мы каждой итерацией перезаписываем последний элемент исходного массива по ссылке вплоть до предпоследнего. Все проблемы из-за отсутствия четкой типизации в языке. Для быстрого фикса подобной проблемы нужно между первым и вторым циклом выполнить unset($b);. UPD: Благодаря комментарию юзера xpurpur стало известно, что проблема стара и даже описана в мануале.
Читайте также
Плата по счетам за 40 лет технического долга: уязвимость PHP показала, как ИИ меняет правила кибервойны
Плата по счетам за 40 лет технического долга: уязвимость PHP показала, как ИИ меняет правила кибервойны
Плата по счетам за 40 лет технического долга: уязвимость PHP показала, как ИИ меняет правила кибервойны
Большая часть интернета работает на PHP. У его фонда один сотрудник и не хватает денег
Большая часть интернета работает на PHP. У его фонда один сотрудник и не хватает денег
Большая часть интернета работает на PHP. У его фонда один сотрудник и не хватает денег
PHP-апокалипсис: уже миллионы попыток атак, под угрозой 70% сайтов интернета
PHP-апокалипсис: уже миллионы попыток атак, под угрозой 70% сайтов интернета
PHP-апокалипсис: уже миллионы попыток атак, под угрозой 70% сайтов интернета
2 комментария
В Беларуси ограничивали зарубежный трафик из-за уязвимостей в PHP
В Беларуси ограничивали зарубежный трафик из-за уязвимостей в PHP
В Беларуси ограничивали зарубежный трафик из-за уязвимостей в PHP
1 комментарий

Хотите сообщить важную новость? Свяжитесь с редакцией через страницу контактов

Главные события и полезные ссылки в нашем Telegram-канале

Абмеркаванне
Каментуйце без абмежаванняў

Рэлацыраваліся? Цяпер вы можаце каментаваць без верыфікацыі акаўнта.

Каментарыяў пакуль няма.