From 5609d8c92b02b292ddc0148e30be7b38a5c207f6 Mon Sep 17 00:00:00 2001 From: Enyby Date: Sat, 19 Oct 2019 20:53:56 +0300 Subject: [PATCH] Add check mode for io.open. #57 --- src/core/org/luaj/vm2/lib/IoLib.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/core/org/luaj/vm2/lib/IoLib.java b/src/core/org/luaj/vm2/lib/IoLib.java index 98c220b5..13f6f986 100644 --- a/src/core/org/luaj/vm2/lib/IoLib.java +++ b/src/core/org/luaj/vm2/lib/IoLib.java @@ -583,6 +583,17 @@ public class IoLib extends TwoArgFunction { } private File rawopenfile(int filetype, String filename, String mode) throws IOException { + int len = mode.length(); + for (int i = 0; i < len; i++) { // [rwa][+]?b* + char ch = mode.charAt(i); + if (i == 0 && "rwa".indexOf(ch) >= 0) continue; + if (i == 1 && ch == '+') continue; + if (i >= 1 && ch == 'b') continue; + len = -1; + break; + } + if (len <= 0) argerror(2, "invalid mode: '" + mode + "'"); + switch (filetype) { case FTYPE_STDIN: return wrapStdin(); case FTYPE_STDOUT: return wrapStdout();