$MSG_Login"; require("template/".$OJ_TEMPLATE."/error.php"); exit(0); } require_once "include/memcache.php"; require_once "include/const.inc.php"; $now = strftime("%Y-%m-%d %H:%M", time()); $user_id = $_SESSION[$OJ_NAME.'_'.'user_id']; $language = intval($_POST['language']); if (!$OJ_BENCHMARK_MODE) { $sql = "SELECT count(1) FROM `solution` WHERE result<4"; $result = mysql_query_cache($sql); $row = $result[0]; if ($row[0] > 50) { $OJ_VCODE = true; } if ($OJ_VCODE) { $vcode = $_POST["vcode"]; } $err_str = ""; $err_cnt = 0; if ($OJ_VCODE && ($_SESSION[$OJ_NAME.'_'."vcode"]==null || $vcode!=$_SESSION[$OJ_NAME.'_'."vcode"] || $vcode=="" || $vcode==null)) { $_SESSION[$OJ_NAME.'_'."vcode"] = null; $err_str = $err_str.$MSG_VCODE_WRONG."\n"; $err_cnt++; $view_errors = $err_str; $_SESSION[ $OJ_NAME . '_' . "vfail" ]=true; require "template/".$OJ_TEMPLATE."/error.php"; exit(0); }else{ $_SESSION[ $OJ_NAME . '_' . "vfail" ]=false; } } $test_run = false; if (isset($_POST['cid'])) { $pid = intval($_POST['pid']); $cid = intval($_POST['cid']); $_GET['cid']=$cid; require_once("contest-check.php"); $test_run = $cid<0; if($test_run) $cid =-$cid ; $sql = "SELECT `problem_id`,'N' FROM `contest_problem` WHERE `num`='$pid' AND contest_id=$cid"; } else { $id = intval($_POST['id']); $test_run = $id<=0; $sql = "SELECT `problem_id`,defunct FROM `problem` WHERE `problem_id`='$id' "; if(!($test_run||isset($_SESSION[$OJ_NAME.'_'.'administrator']))) $sql .= " and defunct='N'"; } //echo $sql; if(!$test_run){ $res = mysql_query_cache($sql); if (isset($res) && count($res)<1 && !isset($_SESSION[$OJ_NAME.'_'.'administrator']) && !((isset($cid)&&$cid<=0) || (isset($id)&&$id<=0))) { $view_errors = $MSG_LINK_ERROR."
"; require "template/".$OJ_TEMPLATE."/error.php"; exit(0); } } if ($res[0][1]!='N' && !($test_run||isset($_SESSION[$OJ_NAME.'_'.'administrator']))) { // echo "res:$res,count:".count($res); // echo "$sql"; $view_errors = $MSG_PROBLEM_RESERVED."
"; if (isset($_POST['ajax'])) { echo $view_errors.$res[0][1]; exit(0); } else { require "template/".$OJ_TEMPLATE."/error.php"; } exit(0); } $title = ""; if (isset($_POST['id'])) { $id = intval($_POST['id']); if($id<=0) $id=-$id; $langmask = $OJ_LANGMASK; } else if (isset($_POST['pid']) && isset($_POST['cid']) && $_POST['cid']!=0) { $pid = intval($_POST['pid']); $cid = intval($_POST['cid']); if ($test_run) { $cid = -$cid; } //check user if private $sql = "SELECT `private`,langmask,title FROM `contest` WHERE `contest_id`=$cid AND `start_time`<='$now' AND `end_time`>'$now'"; //"SELECT `private`,langmask FROM `contest` WHERE `contest_id`=? AND `start_time`<=? AND `end_time`>?"; //$result = pdo_query($sql, $cid, $now, $now); $result = mysql_query_cache($sql); $rows_cnt = count($result); if ($rows_cnt != 1) { $view_errors .= $MSG_NOT_IN_CONTEST; require "template/" . $OJ_TEMPLATE . "/error.php"; exit(0); } else { $row = $result[0]; $isprivate = intval($row[0]); $langmask = $row[1]; $title = $row[2]; if ($isprivate==1 && !isset($_SESSION[$OJ_NAME.'_'.'c'.$cid])) { $sql = "SELECT count(*) FROM `privilege` WHERE `user_id`=? AND `rightstr`=?"; $result = pdo_query($sql, $user_id, "c$cid"); $row = $result[0]; $ccnt = intval($row[0]); if ($ccnt==0 && !isset($_SESSION[$OJ_NAME.'_'.'administrator'])) { $view_errors = $MSG_NOT_INVITED."\n"; require "template/" . $OJ_TEMPLATE . "/error.php"; exit(0); } } } $sql = "SELECT `problem_id` FROM `contest_problem` WHERE `contest_id`=? AND `num`=?"; $result = pdo_query($sql, $cid, $pid); $rows_cnt = count($result); if ($rows_cnt != 1) { $view_errors = $MSG_NO_PROBLEM."\n"; require "template/".$OJ_TEMPLATE."/error.php"; exit(0); } else { $row = $result[0]; $id = intval($row['problem_id']); if ($test_run) { $id = -$id; } } } else { $id = 0; /* $view_errors= "No Such Problem!\n"; require("template/".$OJ_TEMPLATE."/error.php"); exit(0); */ $langmask = $OJ_LANGMASK; $test_run = true; } if ($language > count($language_name) || $language < 0) { $language = 0; } $language = strval($language); if ($langmask&(1<<$language)) { $view_errors = $MSG_NO_PLS."\n[$language][$langmask][".($langmask&(1<<$language))."]"; require "template/".$OJ_TEMPLATE."/error.php"; exit(0); } $source = $_POST['source']; $input_text = ""; if (isset($_POST['input_text'])) { $input_text = $_POST['input_text']; } if (isset($_POST['encoded_submit'])) { $source = decode64($source); } $input_text = preg_replace("(\r\n)", "\n", $input_text); if ($test_run) { $id = -$id; } $tempfile = $_FILES ["answer"] ["tmp_name"]; if($tempfile!=""){ if($language!=23){ $source=file_get_contents($tempfile); $len = strlen($source); unlink($tempfile); }else{ $source="Main.sb3"; } } $origin_name=trim($_FILES ["answer"]['name']); $solution_file = "$OJ_DATA/$id/solution.name"; if(file_exists($solution_file)){ $solution_name=trim(file_get_contents($solution_file)); if($origin_name!=$solution_name){ $source="uploaded file name [$origin_name] is not [$solution_name] "; } } $source_user = $source; //use append Main code $prepend_file = "$OJ_DATA/$id/prepend.".$language_ext[$language]; if (isset($OJ_APPENDCODE) && $OJ_APPENDCODE && file_exists($prepend_file)) { $source = file_get_contents($prepend_file)."\n".$source; } $append_file = "$OJ_DATA/$id/append.".$language_ext[$language]; //echo $append_file; if (isset($OJ_APPENDCODE) && $OJ_APPENDCODE && file_exists($append_file)) { $source .= "\n".file_get_contents($append_file); //echo "$source"; } //end of append $spj=pdo_query("select spj from problem where problem_id=?",$id); if(count($spj)>0) $spj=$spj[0][0]; if ($language == 6 && $spj!= 2) { $source = "# coding=utf-8\n".$source; } if ($test_run) { $id = 0; } if($language!=23) $len = strlen($source);else $len = $_FILES['answer']['size']; //echo $source; setcookie('lastlang', $language, time()+360000); $ip = $_SERVER['REMOTE_ADDR']; if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $REMOTE_ADDR = $_SERVER['HTTP_X_FORWARDED_FOR']; $tmp_ip = explode(',', $REMOTE_ADDR); $ip = htmlentities($tmp_ip[0], ENT_QUOTES, "UTF-8"); } if ($len < 2) { $view_errors = $MSG_TOO_SHORT.$tempfile."
"; require "template/".$OJ_TEMPLATE."/error.php"; exit(0); } if ($len > 65536) { $view_errors = $MSG_TOO_LONG."
"; require "template/" . $OJ_TEMPLATE . "/error.php"; exit(0); } if (!$OJ_BENCHMARK_MODE) { // last submit if(!isset($OJ_SUBMIT_COOLDOWN_TIME)) $OJ_SUBMIT_COOLDOWN_TIME = 5; $now = strftime("%Y-%m-%d %X", time()-$OJ_SUBMIT_COOLDOWN_TIME); $sql = "SELECT `in_date`,solution_id FROM `solution` WHERE `user_id`=? AND in_date>? ORDER BY `in_date` DESC LIMIT 1"; $res = pdo_query($sql, $user_id, $now); if (!empty($res)) { /* $view_errors = $MSG_BREAK_TIME."
"; require "template/".$OJ_TEMPLATE."/error.php"; exit(0); // 预防WAF抽风 */ if(isset($_GET['ajax'])){ echo -1; }else{ $statusURI = "status.php?user_id=".$_SESSION[$OJ_NAME.'_'.'user_id']; if (isset($cid)) { if(isset($_GET['spa'])) $statusURI .="&spa"; $statusURI .= "&cid=$cid&fixed="; } if (!$test_run) { header("Location: $statusURI"); } else { echo $res[0][1]; } } exit(); } } if (~$OJ_LANGMASK&(1<<$language)) { $sql = "SELECT nick FROM users WHERE user_id=?"; $nick = pdo_query($sql, $user_id); if ($nick) { $nick = $nick[0][0]; } else { $nick = "Guest"; } if (!isset($pid)) { $sql = "INSERT INTO solution(problem_id,user_id,nick,in_date,language,ip,code_length,result) VALUES(?,?,?,NOW(),?,?,?,14)"; $insert_id = pdo_query($sql, $id, $user_id, $nick, $language, $ip, $len); } else { $sql = "INSERT INTO solution(problem_id,user_id,nick,in_date,language,ip,code_length,contest_id,num,result) VALUES(?,?,?,NOW(),?,?,?,?,?,14)"; if ((stripos($title,$OJ_NOIP_KEYWORD)!==false) && isset($OJ_OI_1_SOLUTION_ONLY) && $OJ_OI_1_SOLUTION_ONLY) { $delete = pdo_query("DELETE FROM solution WHERE contest_id=? AND user_id=? AND num=?", $cid, $user_id, $pid); if ($delete>0) { $sql_fix = "UPDATE problem p INNER JOIN (SELECT problem_id pid ,count(1) ac FROM solution WHERE problem_id=? AND result=4) s ON p.problem_id=s.pid SET p.accepted=s.ac;"; $fixed = pdo_query($sql_fix,$id); $sql_fix = "UPDATE problem p INNER JOIN (SELECT problem_id pid ,count(1) submit FROM solution WHERE problem_id=?) s ON p.problem_id=s.pid SET p.submit=s.submit;"; $fixed = pdo_query($sql_fix,$id); } } $insert_id = pdo_query($sql, $id, $user_id, $nick, $language, $ip, $len, $cid, $pid); } if($language==23){ mkdir($OJ_DATA."/$id/sb3"); copy($tempfile,$OJ_DATA."/$id/sb3/$insert_id.sb3"); } $sql = "INSERT INTO `source_code_user`(`solution_id`,`source`) VALUES(?,?)"; pdo_query($sql, $insert_id, $source_user); $sql = "INSERT INTO `source_code`(`solution_id`,`source`) VALUES(?,?)"; pdo_query($sql, $insert_id, $source); if ($test_run) { $sql = "INSERT INTO `custominput`(`solution_id`,`input_text`) VALUES(?,?)"; pdo_query($sql, $insert_id, $input_text); } else { $sql = "UPDATE problem SET submit=submit+1 WHERE problem_id=?"; pdo_query($sql,$id); if (isset($cid) && $cid>0) { $sql = "UPDATE contest_problem SET c_submit=c_submit+1 WHERE contest_id=? AND num=?"; pdo_query($sql,$cid,$pid); } } ////remote oj $result=0; $sql="select remote_oj from problem where problem_id=?"; $remote_oj=pdo_query($sql,$id); if(isset($remote_oj[0])){ $remote_oj=$remote_oj[0][0]; if($remote_oj!=""){ $result=16; $sql="update solution set result=16,remote_oj=? where solution_id=?"; pdo_query($sql,$remote_oj,$insert_id); } } ////poison robot account,give system resources to the REAL people if(isset($OJ_POISON_BOT_COUNT) && $OJ_POISON_BOT_COUNT >0 && !(isset($_SESSION[$OJ_NAME."_administrator"])|| isset($_SESSION[$OJ_NAME."_source_browser"])|| isset($_SESSION[$OJ_NAME."_contest_creator"])|| isset($_SESSION[$OJ_NAME."_problem_editor"]) ) ){ $sql="select count(1) from solution where user_id=? and result=4 and problem_id=?"; $count=pdo_query($sql,$user_id,$id); if($count) $count=$count[0][0]; if($count>=$OJ_POISON_BOT_COUNT){ $result=rand(5,11); $memory=rand(100,2000); $time=rand(100,2000); $sql="update solution set memory=?,time=?,judger='poisoner' where solution_id=?"; pdo_query($sql,$memory,$time,$insert_id); if( $OJ_ADMIN != "root@localhost" ){ email($OJ_ADMIN,$MSG_SYS_WARN,"$DOMAIN $MSG_USER $user_id $MSG_IS_ROBOT"); } } /* //prepare system ready for even worse robots $now = strftime("%Y-%m-%d %X", time()-$OJ_SUBMIT_COOLDOWN_TIME * 6 ); $sql="select count(1) from solution where user_id=? and in_date > ?"; $count=pdo_query($sql,$user_id,$now); if($count>=$OJ_POISON_BOT_COUNT){ $sql="update users set defunct='Y' where user_id=?"; pdo_query($sql,$_SESSION[$OJ_NAME."_user_id"]); $sql="select ip from users where user_id=? "; $ip=pdo_query($sql,$_SESSION[$OJ_NAME."_user_id"]); if(count($ip)>0){ $ip=$ip[0][0]; if($ip!="" && $ip!="127.0.0.1"){ $sql="update users set defunct='Y' where ip=?"; pdo_query($sql,$ip); } } unset($_SESSION[$OJ_NAME.'_'.'user_id']); setcookie($OJ_NAME."_user",""); setcookie($OJ_NAME."_check",""); session_destroy(); header("Location:index.php"); } */ } $sql = "UPDATE solution SET result=? WHERE solution_id=?"; pdo_query($sql,$result,$insert_id); //using redis task queue if ( $OJ_REDIS && $result==0 ) { $redis = new Redis(); $redis->connect($OJ_REDISSERVER, $OJ_REDISPORT); if (isset($OJ_REDISAUTH)) { $redis->auth($OJ_REDISAUTH); } $redis->lpush($OJ_REDISQNAME, $insert_id); $redis->close(); } } if (isset($OJ_UDP) && $OJ_UDP && $result==0 ) { trigger_judge($insert_id); // moved to my_func.inc.php } if ($OJ_BENCHMARK_MODE) { echo $insert_id; exit(0); } $statusURI = strstr($_SERVER['REQUEST_URI'], "submit", true)."status.php"; if (isset($cid)) { $statusURI .= "?cid=$cid"; } $sid = ""; if (isset($_SESSION[$OJ_NAME.'_'.'user_id'])) { $sid .= session_id().$_SERVER['REMOTE_ADDR']; } if (isset($_SERVER["REQUEST_URI"])) { $sid .= $statusURI; } //echo $statusURI."
"; $sid = md5($sid); $file = "cache/cache_$sid.html"; //echo $file; if ($OJ_MEMCACHE) { $mem = new Memcache(); if ($OJ_SAE) { $mem = memcache_init(); } else { $mem->connect($OJ_MEMSERVER, $OJ_MEMPORT); } $mem->delete($file, 0); } elseif (file_exists($file)) { unlink($file); } //echo $file; $statusURI = "status.php?user_id=".$_SESSION[$OJ_NAME.'_'.'user_id']; if(isset($_GET['spa'])) $statusURI .="&spa"; if (isset($cid)) { $statusURI .= "&cid=$cid&fixed="; } if (!$test_run&&!isset($_GET['ajax'])) { header("Location: $statusURI"); } else { if (isset($_GET['ajax'])) { echo $insert_id; } else { ?>