librime-lua icon indicating copy to clipboard operation
librime-lua copied to clipboard

是否支持文件IO,主要是I

Open LEOYoon-Tsaw opened this issue 5 years ago • 11 comments

想用lua_filter做字符集過濾,但字符列表寫死在代碼裏非常不優雅,librime-lua腳本支持文件IO嗎?

LEOYoon-Tsaw avatar Aug 03 '20 21:08 LEOYoon-Tsaw

从我的之前的实验来看,支持。

Ace-Who avatar Aug 04 '20 09:08 Ace-Who

从我的之前的实验来看,支持。

問題是路徑根在哪呢?

LEOYoon-Tsaw avatar Aug 04 '20 12:08 LEOYoon-Tsaw

https://github.com/kikito/inspect.lua 把 這檔 放入 lua 用這個 倒出更多

inp= require 'inspect'
str=inp(_G)
-- Opens a file in append mode
file = io.open("test.lua", "a")
-- sets th default output file as test.lua
io.output(file)
-- appends a word test to the last line of the file
io.write(str )
-- closes the open file
io.close(file) 

_G 內容
] ---..librime-lua _G table: ReverseDb function: 7984DDC0 ] ---..librime-lua _G table: xpcall function: 7985DB20 ] ---..librime-lua _G table: rawlen function: 7985D380 ] ---..librime-lua _G table: log table: 00C1BB10 ] ---..librime-lua _G table: tostring function: 7985DBB0 ] ---..librime-lua _G table: Candidate function: 7984D040 ] ---..librime-lua _G table: string table: 00BFA428 ] ---..librime-lua _G table: next function: 7985D660 ] ---..librime-lua _G table: rawequal function: 7985D340 ] ---..librime-lua _G table: Set function: 79858FC0 ] ---..librime-lua _G table: _G table: 00BE4E80 ] ---..librime-lua _G table: table table: 00BFA680 ] ---..librime-lua _G table: utf8 table: 00BFA888 ] ---..librime-lua _G table: setmetatable function: 7985D2C0 ] ---..librime-lua _G table: rawget function: 7985D3D0 ] ---..librime-lua _G table: warn function: 7985CF90 ] ---..librime-lua _G table: pairs function: 7985D6B0 ] ---..librime-lua _G table: collectgarbage function: 7985D450 ] ---..librime-lua _G table: math table: 00BFA8B0 ] ---..librime-lua _G table: require function: 00BE50D8 ] ---..librime-lua _G table: tonumber function: 7985D010 ] ---..librime-lua _G table: date_translator function: 00C1C390 ] ---..librime-lua _G table: getmetatable function: 7985D270 ] ---..librime-lua _G table: Translation function: 7984D920 ] ---..librime-lua _G table: print function: 7985CEE0 ] ---..librime-lua _G table: yield function: 79859120 ] ---..librime-lua _G table: coroutine table: 00BFA810 ] ---..librime-lua _G table: debug table: 00BFA838 ] ---..librime-lua _G table: io table: 00BFA450 ] ---..librime-lua _G table: select function: 7985DA00 ] ---..librime-lua _G table: pcall function: 7985DAA0 ] ---..librime-lua _G table: ipairs function: 7985D720 ] ---..librime-lua _G table: _VERSION Lua 5.4 ] ---..librime-lua _G table: load function: 7985D800 ] ---..librime-lua _G table: Segment function: 7984BD80 ] ---..librime-lua _G table: error function: 7985D210 ] ---..librime-lua _G table: loadfile function: 7985D760 ] ---..librime-lua _G table: assert function: 7985D950 ] ---..librime-lua _G table: type function: 7985D610 ] ---..librime-lua _G table: rawset function: 7985D410 ] ---..librime-lua _G table: package table: 00BE4D18 ] ---..librime-lua _G table: os table: 00BFA6A8 ] ---..librime-lua _G table: dofile function: 7985D8F0

shewer avatar Aug 04 '20 19:08 shewer

从我的之前的实验来看,支持。

問題是路徑根在哪呢?

大约是 Rime 用户目录。

Ace-Who avatar Aug 04 '20 23:08 Ace-Who

load reverdb 是的 ,但 io.open 就找不到了存檔 只好存到絕對路逕 試了 ./filname.text 不行

shewer avatar Aug 05 '20 01:08 shewer

路径应该是从输入法进程的当前目录开始算。

hchunhui avatar Aug 06 '20 12:08 hchunhui

我找完 整個C盤都找不到

shewer avatar Aug 06 '20 17:08 shewer

@shewer 找不到可能是因为权限不足,在打开时就已经失败了。因为输入法程序的目录可能是只读的。

@LEOYoon-Tsaw 虽然可以用 io.open 来做,但实际上文件 IO 这一块是没有考虑过的,比如相对路径的问题。

另外,不知道有没有人认为允许输入法脚本做无限制的 IO 是危险的?有没有必要限制甚至完全禁止?

hchunhui avatar Aug 08 '20 03:08 hchunhui

IO 还是有用的。

Ace-Who avatar Aug 08 '20 03:08 Ace-Who

我認爲是有風險 os.execute
可以破壞 USER data 或 偷取data curl ssh telnet 開後門 execute io 限制在固定路逕下 execute 由 USER 將 允許執行 程式由 link 或 copy 到此

shewer avatar Aug 08 '20 07:08 shewer

@shewer 找不到可能是因为权限不足,在打开时就已经失败了。因为输入法程序的目录可能是只读的。

@LEOYoon-Tsaw 虽然可以用 io.open 来做,但实际上文件 IO 这一块是没有考虑过的,比如相对路径的问题。

另外,不知道有没有人认为允许输入法脚本做无限制的 IO 是危险的?有没有必要限制甚至完全禁止?

我覺得IO應該加以限制,至少應當限制在用戶文件夾/lua/下,絕對路徑應當禁止,否則太過危險

LEOYoon-Tsaw avatar Aug 09 '20 14:08 LEOYoon-Tsaw