comparison arogue5/rogue.c @ 75:19903deed392

arogue5: fix the crash when checking prices in shops. A buffer called curpurch, which stores a description of an item in a trading post which the player might be interested in, was only 15 bytes. It was overflowing into oldrp, a room pointer, leading to segfaults. The size of curpurch has been increased to LINELEN*2, which matches the size of prbuf, which is returned by inv_name and then strcpy()'d to curpurch. As long as nothing overflows prbuf it should be safe now. NOTE that this breaks savefile compatibility.
author John "Elwin" Edwards <elwin@sdf.org>
date Wed, 05 Sep 2012 10:14:34 -0700
parents b27bd9f8c7d0
children ee250e3646fd
comparison
equal deleted inserted replaced
74:0fd87c5c5fca 75:19903deed392
63 int pray_time = 0; 63 int pray_time = 0;
64 int spell_power = 0; 64 int spell_power = 0;
65 int turns = 0; /* Number of turns player has taken */ 65 int turns = 0; /* Number of turns player has taken */
66 int quest_item = 0; /* Item player is looking for */ 66 int quest_item = 0; /* Item player is looking for */
67 char nfloors = -1; /* Number of floors in this dungeon */ 67 char nfloors = -1; /* Number of floors in this dungeon */
68 char curpurch[15]; /* name of item ready to buy */ 68 char curpurch[LINELEN*2]; /* name of item ready to buy */
69 char PLAYER = VPLAYER; /* what the player looks like */ 69 char PLAYER = VPLAYER; /* what the player looks like */
70 char take; /* Thing the rogue is taking */ 70 char take; /* Thing the rogue is taking */
71 char prbuf[LINELEN*2]; /* Buffer for sprintfs */ 71 char prbuf[LINELEN*2]; /* Buffer for sprintfs */
72 char outbuf[BUFSIZ]; /* Output buffer for stdout */ 72 char outbuf[BUFSIZ]; /* Output buffer for stdout */
73 char runch; /* Direction player is running */ 73 char runch; /* Direction player is running */