Source
🇺🇦 Комора Лінуксоїда | Linux | У конфігураційних файлах curl випадково реалізовано повноту за Тюрінго...
414 Views/Reach
2026-11-04 16:23
Message №1838
У конфігураційних файлах curl випадково реалізовано повноту за Тюрінгом
Ця особливість проявляється лише у версіях Curl з 8.12 по 8.16 і зумовлена ненавмисною реалізацією повноти за Тьюрингом, що дозволяє створювати машини Тьюринга, використовуючи можливість вилучати байтові діапазони зі значень змінних та необмежену глибину вкладеності під час підключення зовнішніх конфігураційних файлів.
Як приклад, за допомогою Curl було реалізовано симуляцію роботи дволічильникової регістрової машини (машини Мінського) для додавання чисел та реалізації програми "99 пляшок пива", яка використовується під час навчання роботі з циклами.
На практиці обчислювальні можливості, що реалізуються через файли конфігурації, обмежені розміром стека, оскільки кожен крок виконання програми вимагає завантаження нового вкладеного файлу конфігурації.
При стеку в 8 МБ переповнення виникає приблизно після 922 кроків. На можливості також впливає обмеження на розмір розгортаних змінних (параметр MAX_EXPAND_CONTENT встановлено на 10 МБ) та велике споживання пам’яті через збереження всіх старих версій змінних.
Ця особливість проявляється лише у версіях Curl з 8.12 по 8.16 і зумовлена ненавмисною реалізацією повноти за Тьюрингом, що дозволяє створювати машини Тьюринга, використовуючи можливість вилучати байтові діапазони зі значень змінних та необмежену глибину вкладеності під час підключення зовнішніх конфігураційних файлів.
Як приклад, за допомогою Curl було реалізовано симуляцію роботи дволічильникової регістрової машини (машини Мінського) для додавання чисел та реалізації програми "99 пляшок пива", яка використовується під час навчання роботі з циклами.
На практиці обчислювальні можливості, що реалізуються через файли конфігурації, обмежені розміром стека, оскільки кожен крок виконання програми вимагає завантаження нового вкладеного файлу конфігурації.
При стеку в 8 МБ переповнення виникає приблизно після 922 кроків. На можливості також впливає обмеження на розмір розгортаних змінних (параметр MAX_EXPAND_CONTENT встановлено на 10 МБ) та велике споживання пам’яті через збереження всіх старих версій змінних.