Skip to content
This repository was archived by the owner on Mar 19, 2025. It is now read-only.

Commit 72a3873

Browse files
virusdefendervirusdefender
virusdefender
authored andcommitted
fix memory
add tests
1 parent d7c8e51 commit 72a3873

File tree

10 files changed

+5620
-205
lines changed

10 files changed

+5620
-205
lines changed

CMakeLists.txt

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ cmake_minimum_required(VERSION 2.5)
22
project(judger C)
33

44
#set(CMAKE_VERBOSE_MAKEFILE ON)
5-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output)
6-
7-
set(BASE_CMAKE_C_FLAGS "-Wall -Werror -O3 -std=c99")
8-
set(CMAKE_C_FLAGS "${BASE_CMAKE_C_FLAGS}")
5+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output)
96

7+
set(CMAKE_C_FLAGS "-g -Wall -Werror -O3 -std=c99 -pie -fPIC")
108

119
# make judger lib
1210
file(GLOB SOURCE "src/*.c" "src/rules/*.c")
13-
add_library(judger SHARED ${SOURCE})
14-
target_link_libraries(judger pthread seccomp)
11+
add_executable(libjudger.so ${SOURCE})
12+
target_link_libraries(libjudger.so pthread seccomp)
1513

1614

17-
install(DIRECTORY output/ DESTINATION /usr/lib/judger)
15+
install(FILES output/libjudger.so
16+
PERMISSIONS OWNER_EXECUTE OWNER_READ
17+
DESTINATION /usr/lib/judger)

bindings/Python/_judger.c

-181
This file was deleted.

bindings/Python/_judger/__init__.py

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import json
2+
import subprocess
3+
4+
UNLIMITED = -1
5+
VERSION = 0x020100
6+
7+
RESULT_SUCCESS = 0
8+
RESULT_WRONG_ANSWER = -1
9+
RESULT_CPU_TIME_LIMIT_EXCEEDED = 1
10+
RESULT_REAL_TIME_LIMIT_EXCEEDED = 2
11+
RESULT_MEMORY_LIMIT_EXCEEDED = 3
12+
RESULT_RUNTIME_ERROR = 4
13+
RESULT_SYSTEM_ERROR = 5
14+
15+
ERROR_INVALID_CONFIG = -1
16+
ERROR_FORK_FAILED = -2
17+
ERROR_PTHREAD_FAILED = -3
18+
ERROR_WAIT_FAILED = -4
19+
ERROR_ROOT_REQUIRED = -5
20+
ERROR_LOAD_SECCOMP_FAILED = -6
21+
ERROR_SETRLIMIT_FAILED = -7
22+
ERROR_DUP2_FAILED = -8
23+
ERROR_SETUID_FAILED = -9
24+
ERROR_EXECVE_FAILED = -10
25+
ERROR_SPJ_ERROR = -11
26+
27+
28+
def run(max_cpu_time,
29+
max_real_time,
30+
max_memory,
31+
max_stack,
32+
max_output_size,
33+
max_process_number,
34+
exe_path,
35+
input_path,
36+
output_path,
37+
error_path,
38+
args,
39+
env,
40+
log_path,
41+
seccomp_rule_name,
42+
uid,
43+
gid):
44+
str_list_vars = ["args", "env"]
45+
int_vars = ["max_cpu_time", "max_real_time",
46+
"max_memory", "max_stack", "max_output_size",
47+
"max_process_number", "uid", "gid"]
48+
str_vars = ["exe_path", "input_path", "output_path", "error_path", "log_path"]
49+
50+
proc_args = ["/usr/lib/judger/libjudger.so"]
51+
52+
for var in str_list_vars:
53+
value = vars()[var]
54+
if not isinstance(value, list):
55+
raise ValueError("{} must be a list".format(var))
56+
for item in value:
57+
if not isinstance(item, str):
58+
raise ValueError("{} item must be a string".format(var))
59+
proc_args.append("--{}={}".format(var, item))
60+
61+
for var in int_vars:
62+
value = vars()[var]
63+
if not isinstance(value, int):
64+
raise ValueError("{} must be a int".format(var))
65+
if value != UNLIMITED:
66+
proc_args.append("--{}={}".format(var, value))
67+
68+
for var in str_vars:
69+
value = vars()[var]
70+
if not isinstance(value, str):
71+
raise ValueError("{} must be a string".format(var))
72+
proc_args.append("--{}={}".format(var, value))
73+
74+
if not isinstance(seccomp_rule_name, str) and seccomp_rule_name is not None:
75+
raise ValueError("seccomp_rule_name must be a string or None")
76+
if seccomp_rule_name:
77+
proc_args.append("--seccomp_rule={}".format(seccomp_rule_name))
78+
79+
proc = subprocess.Popen(proc_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
80+
out, err = proc.communicate()
81+
if err:
82+
raise ValueError("Error occurred while calling judger: {}".format(err))
83+
return json.loads(out.decode("utf-8"))

bindings/Python/setup.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
# coding=utf-8
2-
import platform
32
from distutils.core import setup, Extension
43

54
setup(name='_judger',
65
version='2.1',
7-
ext_modules=[Extension('_judger',
8-
sources=['_judger.c'],
9-
extra_link_args=["-L", "/usr/lib/judger", "-l", "judger", "-Wl,-rpath=/usr/lib/judger"])])
6+
packages=["_judger"])

0 commit comments

Comments
 (0)