TGViewer
Типичный программист Типичный программист @tproger · 78.4K subscribers
Post #14832 4.3K
Почему тип указателя не гарантирует безопасность памяти

Указатель сохраняет тип, даже когда байты по его адресу уже означают другое. В примере на Zig структура с меткой сначала хранит срез байтов. Код берёт указатель на это поле, записывает в ту же структуру 128-битное число, а затем разыменовывает старый указатель. Адрес и тип указателя прежние, но внутри уже число: возникает путаница типов.

Автор называет этот случай самым трудным контрпримером для безопасности памяти. Он не зависит от кучи и деструкторов; похожий сценарий ломает и Ada. Практическую опасность автор не преувеличивает: насколько такой баг пригоден для эксплуатации, неясно. Куда более распространённое переполнение буфера компилятор может закрыть проверкой границ.

В разборе Memory Safety’s Hardest Problem есть код, вывод программы и аргумент, почему встроенные границы массивов в C могли предотвратить немало проблем.
matklad.github.io Memory Safety's Hardest Problem Uplifting a lobsters comment for easier reference.
  • 👌 4
  • 🎉 3
  • 🤩 2
  • 🌚 2
  • 🎃 2
  • 🤝 2
  • 👍 1
  • 😢 1
  • 🙏 1
  • 🎄 1
  • 🦄 1
More from @tproger
  1. Sep 20, 2026Мы вернулись из Суздаля с новым взглядом на магазин у дома Были на tech-туре MAGNIT TECH «…
  2. Sep 19, 2026Вопрос на разогрев: что из этого появилось раньше — ICQ, MySpace или Nokia 3310? Если заду…
  3. Sep 19, 2026В Суздаль за DevOps Недавно мы съездили на «Без предела: Исходный код ритейла» от MAGNIT T…
  4. Sep 18, 2026Как Cloudflare освободила 100 ТБ памяти в DNS-кеше 1.1.1.1 Big Pineapple за сервисом 1.1.1…
  5. Sep 18, 2026От исходного кода до процессора: разберись, как работает программа 💻 Стартует практически…
  6. Sep 17, 2026Что происходит с облаками и инфраструктурой? Давайте посмотрим в новой подборке: так ли се…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →