aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-03-08 10:51:01 +0900
committernsfisis <nsfisis@gmail.com>2025-03-08 10:51:01 +0900
commitc06d46eae30c9468535fb6af5e9b822acadbbdb6 (patch)
treec4c740f0cccd15f825596f7a115f3b8f8eb8ffa7
parent32344d99c473b634c37f5d11e52ef389d46d4510 (diff)
downloadiosdc-japan-2025-albatross-c06d46eae30c9468535fb6af5e9b822acadbbdb6.tar.gz
iosdc-japan-2025-albatross-c06d46eae30c9468535fb6af5e9b822acadbbdb6.tar.zst
iosdc-japan-2025-albatross-c06d46eae30c9468535fb6af5e9b822acadbbdb6.zip
trim php tag before execution
-rw-r--r--backend/game/hub.go2
-rw-r--r--worker/exec.mjs15
2 files changed, 14 insertions, 3 deletions
diff --git a/backend/game/hub.go b/backend/game/hub.go
index 0aca96c..46cd321 100644
--- a/backend/game/hub.go
+++ b/backend/game/hub.go
@@ -38,7 +38,7 @@ func (hub *Hub) Run() {
func (hub *Hub) CalcCodeSize(code string) int {
re := regexp.MustCompile(`\s+`)
- return len(re.ReplaceAllString(code, ""))
+ return len(strings.TrimSuffix(strings.TrimPrefix(strings.TrimPrefix(re.ReplaceAllString(code, ""), "<?php"), "<?"), "?>"))
}
func (hub *Hub) EnqueueTestTasks(ctx context.Context, submissionID, gameID, userID int, code string) error {
diff --git a/worker/exec.mjs b/worker/exec.mjs
index 7d64cc3..fc0accd 100644
--- a/worker/exec.mjs
+++ b/worker/exec.mjs
@@ -1,12 +1,23 @@
import PHPWasm from "./php-wasm.js";
-process.once("message", async ({ code, input }) => {
+process.once("message", async ({ code: originalCode, input }) => {
const PRELUDE = `
define('STDIN', fopen('php://stdin', 'r'));
define('STDOUT', fopen('php://stdout', 'r'));
define('STDERR', fopen('php://stderr', 'r'));
`;
+
+ // remove php tag
+ let code;
+ if (originalCode.startsWith("<?php")) {
+ code = PRELUDE + originalCode.slice(5);
+ } else if (originalCode.startsWith("<?")) {
+ code = PRELUDE + originalCode.slice(2);
+ } else {
+ code = PRELUDE + originalCode;
+ }
+
const BUFFER_MAX = 1024;
let stdinPos = 0; // bytewise
@@ -52,7 +63,7 @@ process.once("message", async ({ code, input }) => {
let err;
let result;
try {
- result = ccall("php_wasm_run", "number", ["string"], [PRELUDE + code]);
+ result = ccall("php_wasm_run", "number", ["string"], [code]);
} catch (e) {
err = e;
}