--- lbbs/src/user_info_display.c 2025/10/23 13:23:49 1.8 +++ lbbs/src/user_info_display.c 2025/10/23 14:17:09 1.10 @@ -40,7 +40,7 @@ const char *get_astro_name(time_t birthd { struct tm tm_birth; - localtime_r(&birthday, &tm_birth); + gmtime_r(&birthday, &tm_birth); if (tm_birth.tm_mday < astro_dates[tm_birth.tm_mon]) { @@ -139,6 +139,7 @@ int user_info_display(USER_INFO *p_user_ char str_last_logout_dt[LAST_LOGIN_DT_MAX_LEN + 1]; char login_ip[IP_ADDR_LEN]; int ip_mask_level; + const char *p_action_title; char action_str[LINE_BUFFER_LEN]; const char *user_level_name; char intro_f[BBS_user_intro_max_len]; @@ -199,13 +200,17 @@ int user_info_display(USER_INFO *p_user_ p = action_str; for (i = 0; i < session_cnt; i++) { - if (p + strlen(sessions[i].current_action_title) + 4 >= action_str + sizeof(action_str)) // buffer overflow + p_action_title = (sessions[i].current_action_title != NULL + ? sessions[i].current_action_title + : sessions[i].current_action); + + if (p + strlen(p_action_title) + 4 >= action_str + sizeof(action_str)) // buffer overflow { log_error("action_str of user(uid=%d) truncated at i=%d\n", p_user_info->uid, i); break; } *p++ = '['; - for (q = sessions[i].current_action_title; *q != '\0';) + for (q = p_action_title; *q != '\0';) { *p++ = *q++; }