From 00f9043bbce148bd9084fc52f6d3a4283ca6401f Mon Sep 17 00:00:00 2001 From: Hourier Date: Mon, 24 Feb 2020 15:48:37 +0900 Subject: [PATCH 1/1] =?utf8?q?[Fix]=20#39962=20read=5Fdead=5Ffile()=20?= =?utf8?q?=E3=81=ABsize=5Ft=20=E5=BC=95=E6=95=B0=E3=82=92=E8=BF=BD?= =?utf8?q?=E5=8A=A0=20/=20Added=20size=5Ft=20argument=20to=20read=5Fdead?= =?utf8?q?=5Ffile()?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/files.c | 8 +++++--- src/files.h | 2 +- src/view/process-death.c | 14 +++++--------- src/view/process-death.h | 2 +- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/files.c b/src/files.c index 55bbdd4d2..958431612 100644 --- a/src/files.c +++ b/src/files.c @@ -74,6 +74,7 @@ concptr ANGBAND_DIR_BONE; //!< Bone files for player ghosts (ascii) These files concptr ANGBAND_DIR_DATA; //!< Binary image files for the "*_info" arrays (binary) These files are not portable between platforms concptr ANGBAND_DIR_EDIT; //!< Textual template files for the "*_info" arrays (ascii) These files are portable between platforms concptr ANGBAND_DIR_SCRIPT; //!< Script files These files are portable between platforms. +concptr ANGBAND_DIR_FILE; //!< Various extra files (ascii) These files may be portable between platforms concptr ANGBAND_DIR_HELP; //!< Help files (normal) for the online help (ascii) These files are portable between platforms concptr ANGBAND_DIR_INFO; //!< Help files (spoilers) for the online help (ascii) These files are portable between platforms concptr ANGBAND_DIR_PREF; //!< Default user "preference" files (ascii) These files are rarely portable between platforms @@ -4950,18 +4951,19 @@ errr counts_write(player_type *creature_ptr, int where, u32b count) /*! * @brief 墓のアスキーアートテンプレを読み込む * @param buf テンプレへのバッファ + * @param buf_size バッファの長さ * @return なし */ -void read_dead_file(char *buf) +void read_dead_file(char *buf, size_t buf_size) { - path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, _("dead_j.txt", "dead.txt")); + path_build(buf, buf_size, ANGBAND_DIR_FILE, _("dead_j.txt", "dead.txt")); FILE *fp; fp = my_fopen(buf, "r"); if (!fp) return; int i = 0; - while (my_fgets(fp, buf, sizeof(buf)) == 0) + while (my_fgets(fp, buf, buf_size) == 0) { put_str(buf, i++, 0); } diff --git a/src/files.h b/src/files.h index ce55f1462..7f550a603 100644 --- a/src/files.h +++ b/src/files.h @@ -37,7 +37,7 @@ extern void do_cmd_save_game(player_type *creature_ptr, int is_autosave); extern void do_cmd_save_and_exit(player_type *player_ptr); extern void exit_game_panic(player_type *creature_ptr); extern errr get_rnd_line(concptr file_name, int entry, char *output); -void read_dead_file(char* buf); +void read_dead_file(char* buf, size_t buf_size); #ifdef JP extern errr get_rnd_line_jonly(concptr file_name, int entry, char *output, int count); diff --git a/src/view/process-death.c b/src/view/process-death.c index 7315e5c94..92e79894d 100644 --- a/src/view/process-death.c +++ b/src/view/process-death.c @@ -16,8 +16,6 @@ #define GRAVE_LINE_WIDTH 31 -concptr ANGBAND_DIR_FILE; //!< Various extra files (ascii) These files may be portable between platforms - /*! * @brief 墓石の真ん中に文字列を書き込む / * Centers a string within a GRAVE_LINE_WIDTH character string -JWT- @@ -38,10 +36,9 @@ static void center_string(char *buf, concptr str) * @param buf 墓テンプレへのバッファ * @return 追加の行数 */ -static int show_killing_monster(player_type *dead_ptr, char *buf) +static int show_killing_monster(player_type *dead_ptr, char *buf, char *tmp) { - char tmp[160]; - roff_to_buf(dead_ptr->died_from, GRAVE_LINE_WIDTH + 1, tmp, sizeof tmp); + roff_to_buf(dead_ptr->died_from, GRAVE_LINE_WIDTH + 1, tmp, sizeof(tmp)); char *t; t = tmp + strlen(tmp) + 1; if (!*t) return 0; @@ -88,12 +85,11 @@ static int show_killing_monster(player_type *dead_ptr, char *buf) * @param creature_ptr プレーヤーへの参照ポインタ * @return なし */ -void print_tomb(player_type *dead_ptr, void(*read_dead_file)(char*)) +void print_tomb(player_type *dead_ptr, void(*read_dead_file)(char*, size_t)) { Term_clear(); char buf[1024]; - (*read_dead_file)(buf); - + (*read_dead_file)(buf, sizeof(buf)); concptr p = (current_world_ptr->total_winner || (dead_ptr->lev > PY_MAX_LEVEL)) ? _("偉大なる者", "Magnificant") : player_title[dead_ptr->pclass][(dead_ptr->lev - 1) / 5]; @@ -143,7 +139,7 @@ void print_tomb(player_type *dead_ptr, void(*read_dead_file)(char*)) } else { - extra_line = show_killing_monster(dead_ptr, buf); + extra_line = show_killing_monster(dead_ptr, buf, tmp); } center_string(buf, tmp); diff --git a/src/view/process-death.h b/src/view/process-death.h index 242184229..2e1b24c71 100644 --- a/src/view/process-death.h +++ b/src/view/process-death.h @@ -2,5 +2,5 @@ #include "angband.h" -void print_tomb(player_type *dead_ptr, void(*read_dead_file)(char*)); +void print_tomb(player_type *dead_ptr, void(*read_dead_file)(char*, size_t)); void show_info(player_type *creature_ptr, void(*handle_stuff)(player_type*), errr(*file_character)(player_type*, concptr), void(*update_playtime)(void), void(*displayer_player)(player_type*, int)); -- 2.11.0