Есть ли способ перенаправить io.open для загрузки файла из пользовательской функции в lua? - PullRequest
1 голос
/ 08 апреля 2019

Я использую Lua Embedded. В моем случае я хотел бы загружать файлы из поддельной файловой системы памяти (на основе файла .zip), а не из реальной файловой системы.

Чтобы сделать это, я думаю, что мне нужно перенаправить / переопределить все внутренние fopen вызовы на что-то, что выглядит только внутри .zip-файла. Это не представляется возможным. Это так?

Как мне создать безопасную песочницу Lua?

Вот краткий пример:

Этот код откроет текстовый файл и прочитает содержимое в локальную переменную. Внутренне он использует fopen(), что означает, что он будет использовать только реальную файловую систему.

local f = io.open('filename.txt')
local t = f:read("*all")
f:close()

Вместо этого я хочу, чтобы это внутренне вызвало мою «поддельную» файловую систему, и я верну содержимое файла из поддельной файловой системы.

Я уже смог выполнить что-то подобное для загрузки только файлов .lua. Это сработало, добавив пользовательский поисковик / загрузчик, который загружал файлы из файла .zip. Теперь require("something.lua") загружается только из поддельной файловой системы, что идеально.

Однако load(), dofile() и loadfile() все еще работают и используют fopen(). В настоящее время я обнуляю их, пока не найду лучшее решение.

load = nil
dofile = nil
loadfile = nil

На каком-то уровне, я думаю, я действительно хочу перенаправить все вызовы файловой системы куда-то еще.

Несмотря на это, я сузил область для этого SO вопроса, чтобы просто задать вопрос io.open. Должен ли я заменить / перенаправить io.open в lua на свой собственный, чтобы он загружался из моей поддельной файловой системы. Я догадываюсь по расширению, буду ли я тогда заново определять пространство имен io?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...