def get_feedback_str(cls, error, process, binary): is_ir_or_rte = (process.is_ir or process.is_rte) and not ( process.is_tle or process.is_mle or process.is_ole) if hasattr(process, 'feedback'): feedback = process.feedback elif is_ir_or_rte: feedback = binary.parse_feedback_from_stderr(error, process) else: feedback = '' if not feedback and is_ir_or_rte: if not process.was_initialized or ( error and b'error while loading shared libraries' in error): # Process may failed to initialize, resulting in a SIGKILL without any prior signals. # See <https://github.com/DMOJ/judge/issues/179> for more details. feedback = 'failed initializing' elif process.signal: feedback = strsignal(process.signal).lower() if process.protection_fault: syscall, callname, args = process.protection_fault print_protection_fault(process.protection_fault) callname = callname.replace('sys_', '', 1) message = '%s syscall disallowed' % callname feedback = message return feedback
def update_feedback(self, check, error, process, result): result.feedback = (check.feedback or (process.feedback if hasattr(process, 'feedback') else getattr(self.binary, 'get_feedback', lambda x, y, z: '')(error, result, process))) if not result.feedback and result.get_main_code() == Result.RTE: if not process.was_initialized: # Process may failed to initialize, resulting in a SIGKILL without any prior signals. # See <https://github.com/DMOJ/judge/issues/179> for more details. result.feedback = 'failed initializing' else: result.feedback = strsignal(process.signal).lower() if process.protection_fault: syscall, callname, args = process.protection_fault print_protection_fault(process.protection_fault) callname = callname.replace('sys_', '', 1) message = '%s syscall disallowed' % callname result.feedback = message
def parse_helper_file_error(proc, executor, name, stderr, time_limit, memory_limit): if proc.is_tle: error = '%s timed out (> %d seconds)' % (name, time_limit) elif proc.is_mle: error = '%s ran out of memory (> %s Kb)' % (name, memory_limit) elif proc.protection_fault: syscall, callname, args = proc.protection_fault error = '%s invoked disallowed syscall %s (%s)' % (name, syscall, callname) elif proc.returncode: if proc.returncode > 0: error = '%s exited with nonzero code %d' % (name, proc.returncode) else: error = '%s exited with %s' % (name, strsignal(proc.signal)) feedback = Result.get_feedback_str(stderr, proc, executor) if feedback: error += ' with feedback %s' % feedback else: return raise InternalError(error)