看板 PttNewhand 關於我們 聯絡資訊
作者: [email protected] (╭☆微風★╯) 看板: weifeng 標題: [Ptt Update] 2015/02/24 水桶日期計算變更 時間: Tue Feb 24 23:22:21 2015 [修正內容]   更新水桶日期過多,導致溢位,造成水桶失效或錯亂的問題。   ❶ 原先為 uint32_t 儲存欄位,     更新之後變為 uint64_t 儲存欄位。   ❷ 小知識 by HWBA (2015.02.24)     uint8_t 為 0~2^8-1 (0x00~0xFF)     uint16_t 為 0~2^16-1 (0x0000~0xFFFF)     uint32_t 為 0~2^32-1 (0x00000000~0xFFFFFFFF)     uint64_t 為 0~2^64-1 (0x0000000000000000~0xFFFFFFFFFFFFFFFF)     2^8=256=0x00     2^16=(2^8)^2=65536     2^32=(2^16)^2=4294967296     2^64=(2^32)^2=18446744073709551616 [修正代碼] static int ui_ban_user_for_board(const char *uid, const char *board) { time4_t expire = now; int y, x; int result; char ans[3]; char history_log[PATHLEN]; char reason[STRLEN]; char datebuf[STRLEN]; setbfile(history_log, board, FN_BANNED_HISTORY); getyx(&y, &x); if ((expire = is_user_banned_by_board(uid, board))) { vmsgf("使用者之前已被禁言,尚有 %d 天;詳情可用(S)或(L)查看", (expire - now) / DAY_SECONDS+1); return -1; } prints("將使用者 %s 加入看板 %s 的禁言名單。", uid, board); move(y+3, 0); syncnow(); outs("目前接受的格式是 [數字][單位]。 " "單位有: 年(y), 月(m), 天(d)\n" "範例: 3m (三個月), 120d (120天), 10y (10年)\n" "注意不可混合輸入(例:沒有三個半月這種東西,請換算成天數)\n" ); getdata(y+1, 0, "請以數字跟單位(預設為天)輸入期限: ", datebuf, 8, DOECHO); trim(datebuf); if (!*datebuf) { vmsg("未輸入期限,放棄。"); return -1; } else { int val = atoi(datebuf); uint64_t long_now; switch(tolower(datebuf[strlen(datebuf)-1])) { case 'y': val *= 365; break; case 'm': val *= 30; break; case 'd': default: break; } if (val < 1) { vmsg("日期格式輸入錯誤或是小於一天無法處理。"); return -1; } long_now = (uint64_t)now + val * (uint64_t)DAY_SECONDS; expire = long_now; if ((uint64_t)expire != long_now) { vmsg("日期過大或無法處理,請重新輸入。"); return -1; } move(y+3, 0); clrtobot(); // sprintf(datebuf, "%s", Cdatelite(&expire)); sprintf(datebuf, "%d 天", val); prints("期限將設定為 %s之後: %s\n", datebuf, Cdatelite(&expire)); if (val > KEEP_DAYS_REGGED) { mvprints(y+6, 0, ANSI_COLOR(1;31) "注意: 超過 %d 天的設定有可能因為對方一直" "未上站而導致帳號過期被重新註冊,\n" " 此時同名的新帳號由於不一定是同一人所以" "不會被禁言。\n" ANSI_RESET, KEEP_DAYS_REGGED); } } --         ╱     ╱ [個人板] BS2 P_HWBA板         ████◣╱ █████  weifeng板 ╱       ╱  █      ─────────── █████      █████  ╱     熱心 愛心 耐心 服務心      ╱  █  █████  真意 善意 美意 誠意 HWBA █████ █████   ────── ψHWBA -- ※ 發信站: 批踢踢兔(ptt2.cc), 來自: 118.168.40.233 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: HWBA (118.168.40.233), 03/12/2015 23:11:24 --         ╱     ╱ [個人板] BS2 P_HWBA板         ████◣╱ █████  weifeng板 ╱       ╱  █      ─────────── █████      █████  ╱     熱心 愛心 耐心 服務心      ╱  █  █████  真意 善意 美意 誠意 HWBA █████ █████   ────── ψHWBA -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.40.233 ※ 文章網址: https://www.ptt.cc/bbs/PttNewhand/M.1426173246.A.DE4.html