summaryrefslogtreecommitdiff
path: root/tex/generic/context/luatex/luatex-core.lua
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2017-06-16 16:00:40 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2017-06-16 16:00:40 +0200
commit008292817580eba8a0f0cf83d8e2d08df8fc8c3f (patch)
tree7e47d035cc5d1f54d20f556476c439844f1956e0 /tex/generic/context/luatex/luatex-core.lua
parent5e668aa418d6d082446e9369ae06625b50e49943 (diff)
downloadcontext-008292817580eba8a0f0cf83d8e2d08df8fc8c3f.tar.gz
2017-06-15 22:16:00
Diffstat (limited to 'tex/generic/context/luatex/luatex-core.lua')
-rw-r--r--tex/generic/context/luatex/luatex-core.lua75
1 files changed, 47 insertions, 28 deletions
diff --git a/tex/generic/context/luatex/luatex-core.lua b/tex/generic/context/luatex/luatex-core.lua
index 16df01707..870a25d48 100644
--- a/tex/generic/context/luatex/luatex-core.lua
+++ b/tex/generic/context/luatex/luatex-core.lua
@@ -5,18 +5,18 @@
-- copyright = 'LuaTeX Development Team',
-- }
-LUATEXCOREVERSION = 1.002
+LUATEXCOREVERSION = 1.003
-- This file overloads some Lua functions. The readline variants provide the same
-- functionality as LuaTeX <= 1.04 and doing it this way permits us to keep the
-- original io libraries clean. Performance is probably even a bit better now.
local type, next, getmetatable, require = type, next, getmetatable, require
-local find, gsub = string.find, string.gsub
+local find, gsub, format = string.find, string.gsub, string.format
local io_open = io.open
local io_popen = io.popen
-local io_line = io.lines
+local io_lines = io.lines
local fio_readline = fio.readline
local fio_checkpermission = fio.checkpermission
@@ -28,8 +28,8 @@ local saferoption = status.safer_option
local shellescape = status.shell_escape -- 0 (disabled) 1 (anything) 2 (restricted)
local kpseused = status.kpse_used -- 0 1
-io.saved_open = io_open -- can be protected
-io.saved_popen = io_popen -- can be protected
+local write_nl = texio.write_nl
+
io.saved_lines = io_lines -- always readonly
mt.saved_lines = mt_lines -- always readonly
@@ -71,12 +71,16 @@ local function luatex_io_popen(name,...)
end
end
-local function luatex_io_lines(name)
- local f = io_open(name,'r')
- if f then
- return function()
- return fio_readline(f)
+local function luatex_io_lines(name,how)
+ if name then
+ local f = io_open(name,how or 'r')
+ if f then
+ return function()
+ return fio_readline(f)
+ end
end
+ else
+ return io_lines()
end
end
@@ -101,29 +105,44 @@ end
if saferoption == 1 then
- os.execute = nil
- os.spawn = nil
- os.exec = nil
- os.setenv = nil
- os.tempdir = nil
+ local function installdummy(str,f)
+ local reported = false
+ return function(...)
+ if not reported then
+ write_nl(format("safer option set, function %q is %s",
+ str,f and "limited" or "disabled"))
+ reported = true
+ end
+ if f then
+ return f(...)
+ end
+ end
+ end
+
+ local function installlimit(str,f)
+ local reported = false
+ end
- io.popen = nil
- io.open = nil
+ os.execute = installdummy("os.execute")
+ os.spawn = installdummy("os.spawn")
+ os.exec = installdummy("os.exec")
+ os.setenv = installdummy("os.setenv")
+ os.tempdir = installdummy("os.tempdir")
- os.rename = nil
- os.remove = nil
+ io.popen = installdummy("io.popen")
+ io.open = installdummy("io.open",luatex_io_open_readonly)
- io.tmpfile = nil
- io.output = nil
+ os.rename = installdummy("os.rename")
+ os.remove = installdummy("os.remove")
- lfs.chdir = nil
- lfs.lock = nil
- lfs.touch = nil
- lfs.rmdir = nil
- lfs.mkdir = nil
+ io.tmpfile = installdummy("io.tmpfile")
+ io.output = installdummy("io.output")
- io.saved_popen = nil
- io.saved_open = luatex_io_open_readonly
+ lfs.chdir = installdummy("lfs.chdir")
+ lfs.lock = installdummy("lfs.lock")
+ lfs.touch = installdummy("lfs.touch")
+ lfs.rmdir = installdummy("lfs.rmdir")
+ lfs.mkdir = installdummy("lfs.mkdir")
end