restricting host access

This commit is contained in:
minjaesong
2021-10-27 19:37:23 +09:00
parent 886bea5ccb
commit 1c8261cc7e
5 changed files with 31 additions and 430 deletions

View File

@@ -8419,428 +8419,6 @@ xxi,
xr,。
xxr,
xxxxx,
za,
za,
za,“
za,”
za,
za,
za,〈
za,〉
za,《
za,》
za,…
za,「
za,」
za,『
za,』
za,〖
za,〗
za,【
za,】
za,№
za,☆
za,★
za,○
za,●
za,◎
za,◇
za,◆
za,□
za,■
za,△
za,▲
za,※
za,→
za,←
za,↑
za,↓
za,〓
zb,
zb,ⅱ
zb,ⅲ
zb,ⅳ
zb,
zb,ⅵ
zb,ⅶ
zb,ⅷ
zb,ⅸ
zb,
zba,⒈
zba,⒉
zba,⒊
zba,⒋
zba,⒌
zba,⒍
zba,⒎
zba,⒏
zba,⒐
zba,⒑
zba,⒒
zba,⒓
zba,⒔
zba,⒕
zba,⒖
zba,⒗
zba,⒘
zba,⒙
zba,⒚
zba,⒛
zbb,⑴
zbb,⑵
zbb,⑶
zbb,⑷
zbb,⑸
zbb,⑹
zbb,⑺
zbb,⑻
zbb,⑼
zbb,⑽
zbb,⑾
zbb,⑿
zbb,⒀
zbb,⒁
zbb,⒂
zbb,⒃
zbb,⒄
zbb,⒅
zbb,⒆
zbb,⒇
zbc,①
zbc,②
zbc,③
zbc,④
zbc,⑤
zbc,⑥
zbc,⑦
zbc,⑧
zbc,⑨
zbc,⑩
zbd,㈠
zbd,㈡
zbd,㈢
zbd,㈣
zbd,㈤
zbd,㈥
zbd,㈦
zbd,㈧
zbd,㈨
zbd,㈩
zbe,
zbe,Ⅱ
zbe,Ⅲ
zbe,Ⅳ
zbe,
zbe,Ⅵ
zbe,Ⅶ
zbe,Ⅷ
zbe,Ⅸ
zbe,
zbe,Ⅺ
zbe,Ⅻ
zc,ぁ
zc,あ
zc,ぃ
zc,い
zc,ぅ
zc,う
zc,ぇ
zc,え
zc,ぉ
zc,お
zc,か
zc,が
zc,き
zc,ぎ
zc,く
zc,ぐ
zc,け
zc,げ
zc,こ
zc,ご
zc,さ
zc,ざ
zc,し
zc,じ
zc,す
zc,ず
zc,せ
zc,ぜ
zc,そ
zc,ぞ
zc,た
zc,だ
zc,ち
zc,ぢ
zc,っ
zc,つ
zc,づ
zc,て
zc,で
zc,と
zc,ど
zc,な
zc,に
zc,ぬ
zc,ね
zc,の
zc,は
zc,ば
zc,ぱ
zc,ひ
zc,び
zc,ぴ
zc,ふ
zc,ぶ
zc,ぷ
zc,へ
zc,べ
zc,ぺ
zc,ほ
zc,ぼ
zc,ぽ
zc,ま
zc,み
zc,む
zc,め
zc,も
zc,ゃ
zc,や
zc,ゅ
zc,ゆ
zc,ょ
zc,よ
zc,ら
zc,り
zc,る
zc,れ
zc,ろ
zc,ゎ
zc,わ
zc,ゐ
zc,ゑ
zc,を
zc,ん
zd,ァ
zd,ア
zd,ィ
zd,イ
zd,ゥ
zd,ウ
zd,ェ
zd,エ
zd,ォ
zd,オ
zd,カ
zd,ガ
zd,キ
zd,ギ
zd,ク
zd,グ
zd,ケ
zd,ゲ
zd,コ
zd,ゴ
zd,サ
zd,ザ
zd,シ
zd,ジ
zd,ス
zd,ズ
zd,セ
zd,ゼ
zd,ソ
zd,ゾ
zd,タ
zd,ダ
zd,チ
zd,ヂ
zd,ッ
zd,ツ
zd,ヅ
zd,テ
zd,デ
zd,ト
zd,ド
zd,ナ
zd,ニ
zd,ヌ
zd,ネ
zd,
zd,ハ
zd,バ
zd,パ
zd,ヒ
zd,ビ
zd,ピ
zd,フ
zd,ブ
zd,プ
zd,ヘ
zd,ベ
zd,ペ
zd,ホ
zd,ボ
zd,ポ
zd,マ
zd,ミ
zd,ム
zd,メ
zd,モ
zd,ャ
zd,ヤ
zd,ュ
zd,ユ
zd,ョ
zd,ヨ
zd,ラ
zd,リ
zd,ル
zd,レ
zd,ロ
zd,ヮ
zd,ワ
zd,ヰ
zd,ヱ
zd,ヲ
zd,ン
zd,ヴ
zd,ヵ
zd,ヶ
zf,Α
zf,Β
zf,Γ
zf,Δ
zf,Ε
zf,Ζ
zf,Η
zf,Θ
zf,Ι
zf,Κ
zf,Λ
zf,Μ
zf,Ν
zf,Ξ
zf,Ο
zf,Π
zf,Ρ
zf,Σ
zf,Τ
zf,Υ
zf,Φ
zf,Χ
zf,Ψ
zf,Ω
zf,α
zf,β
zf,γ
zf,δ
zf,ε
zf,ζ
zf,η
zf,θ
zf,ι
zf,κ
zf,λ
zf,μ
zf,ν
zf,ξ
zf,ο
zf,π
zf,ρ
zf,σ
zf,τ
zf,υ
zf,φ
zf,χ
zf,ψ
zf,ω
zf,︵
zf,︶
zf,︹
zf,︺
zf,︿
zf,﹀
zf,︽
zf,︾
zf,﹁
zf,﹂
zf,﹃
zf,﹄
zf,︻
zf,︼
zf,︷
zf,︸
zf,︱
zf,
zf,︳
zf,︴
zg,А
zg,Б
zg,В
zg,Г
zg,Д
zg,Е
zg,Ё
zg,Ж
zg,З
zg,И
zg,Й
zg,К
zg,Л
zg,М
zg,Н
zg,О
zg,П
zg,Р
zg,С
zg,Т
zg,У
zg,Ф
zg,Х
zg,Ц
zg,Ч
zg,Ш
zg,Щ
zg,Ъ
zg,Ы
zg,Ь
zg,Э
zg,Ю
zg,Я
zg,а
zg,б
zg,в
zg,г
zg,д
zg,е
zg,ё
zg,ж
zg,з
zg,и
zg,й
zg,к
zg,л
zg,м
zg,н
zg,о
zg,п
zg,р
zg,с
zg,т
zg,у
zg,ф
zg,х
zg,ц
zg,ч
zg,ш
zg,щ
zg,ъ
zg,ы
zg,ь
zg,э
zg,ю
zg,я
zxaa, 
zxab,
zxac,、

View File

@@ -264,7 +264,7 @@ let reset = () => {
states.candidates = ""
}
let getCandidatesUsingBuf = () => {
states.candidates = states.dict.get(states.buf) // comma-separated values
states.candidates = states.dict.getCangjie(states.buf) // comma-separated values
states.code = 1 + (states.candidates.length == 0)
// console.log(`cangjie in, buf: ${states.buf}, candidates: ${states.candidates}`)
return `${states.buf},${states.candidates}`

View File

@@ -264,7 +264,7 @@ let reset = () => {
states.candidates = ""
}
let getCandidatesUsingBuf = () => {
states.candidates = states.dict.get(states.buf) // comma-separated values
states.candidates = states.dict.getCangjie(states.buf) // comma-separated values
states.code = 1 + (states.candidates.length == 0)
// console.log(`cangjie in, buf: ${states.buf}, candidates: ${states.candidates}`)
return `${states.buf},${states.candidates}`

View File

@@ -47,7 +47,7 @@ object IME {
private val highLayers = HashMap<String, TerrarumInputMethod>()
private val context = org.graalvm.polyglot.Context.newBuilder("js")
.allowHostAccess(org.graalvm.polyglot.HostAccess.ALL)
.allowHostAccess(org.graalvm.polyglot.HostAccess.EXPLICIT)
// .allowHostClassLookup { it.equals("net.torvald.terrarum.gamecontroller.IMEProviderDelegate") }
.allowHostClassLookup { false }
.allowIO(false)

View File

@@ -2,6 +2,7 @@ package net.torvald.terrarum.gamecontroller
import net.torvald.terrarum.App.printdbg
import net.torvald.util.SortedArrayList
import org.graalvm.polyglot.HostAccess
import java.io.File
import java.io.FileReader
@@ -9,6 +10,7 @@ class IMEProviderDelegate(val ime: IME) {
private val dictionaries = HashMap<String, IMEDictionary>()
@HostAccess.Export
fun requestDictionary(filename: String): IMEDictionary {
return dictionaries.getOrPut(filename) { IMEDictionary(filename) }
}
@@ -18,7 +20,7 @@ class IMEProviderDelegate(val ime: IME) {
class IMEDictionary(private val filename: String) {
private val candidates = HashMap<String, String>(16384)
private val keys = SortedArrayList<String>(16384)
private val keys = SortedArrayList<String>(16384) // keys on the .han file are absofreakinlutely not sorted
private var dictLoaded = false
@@ -44,15 +46,36 @@ class IMEDictionary(private val filename: String) {
loadDict() // loading the dict doesn't take too long so no need to do it lazily
}
operator fun get(key: String): String {
@HostAccess.Export
fun getCangjie(key: String): String {
//if (!dictLoaded) loadDict()
val out = StringBuilder()
var outsize = 0
var index = keys.searchForInterval(key) { it }.second
while (outsize < 10) {
val keysym = keys[index]
val allRelevantKeys = ArrayList<String>() // oh, oha, ohag, ohbt, ohby, ...
for (i in 0 until 10) {
if (index + 1 >= keys.size) break
val keysym = keys[index + i]
if (!keysym.startsWith(key)) break
allRelevantKeys.add(keysym)
}
// printdbg(this, "lookup key: $key")
// sort allRelevantKeys so that short sequences come first
// e.g. oh, oha, ohg, ohj, ohn, ohq, ohag, ohbt, ...
allRelevantKeys.sortWith { it, other ->
if (it.length == other.length) it.compareTo(other)
else it.length.compareTo(other.length)
}
// printdbg(this, "predictions: (${allRelevantKeys.size}) ${allRelevantKeys.joinToString()}")
index = 0 // now this is an index for the allRelevantKeys
while (outsize < 10 && index < allRelevantKeys.size) {
val keysym = allRelevantKeys[index]
if (!keysym.startsWith(key)) break
val outstr = ",${candidates[keysym]}"
@@ -64,5 +87,5 @@ class IMEDictionary(private val filename: String) {
return if (out.isNotEmpty()) out.substring(1) else ""
}
}