fix prompt string overflow in lift_object()
<email deleted> wrote:
> The game crashed badly when I made some experiments with items
> with very long names:
>
> You have much trouble lifting a blessed greased thoroughly rusty >thoroughly corroded +3 plate mail named terribly long killer longer than my
>ong long-worm called long. Continue? [ynq] (q)
tty_yn_function(const char * 0x0012fa50,
const char * 0x00572ddc _ynqchars, char 113) line 379 + 6 bytes
lift_object(obj * 0x009e8970, obj * 0x00000000,
long * 0x0012fcd0, char 0) line 1131 + 20 bytes
pickup_object(obj * 0x009e8970, long 1, char 0) line 1258 + 19 bytes
pickup(int 0) line 474 + 28 bytes
dopickup() line 1853 + 11 bytes
rhack(char * 0x005c0d50 in_line) line 1908 + 3 bytes
moveloop() line 406 + 7 bytes
main(int 3, char * * 0x009e2ac0) line 102
This commit is contained in:
@@ -50,6 +50,7 @@ give more explicit feedback for exploding bag of holding
|
||||
help display for "list of game options" misformats runmode and scroll_amount
|
||||
pit created by land mine explosion doesn't start out concealed
|
||||
update map display sooner when pushed boulder triggers land mine explosion
|
||||
prevent fatal error from prompt string overflow in lift_object()
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific Fixes
|
||||
|
||||
@@ -26,6 +26,7 @@ dust vortex-induced blindness should kick in immediately when blindfold
|
||||
is removed or glop is wiped off
|
||||
prayer/unicorn-horn won't fix blindness while still engulfed in a dust
|
||||
vortex since it will just return immediately
|
||||
prevent fatal error from prompt string overflow in lift_object()
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific Fixes
|
||||
|
||||
10
src/pickup.c
10
src/pickup.c
@@ -1122,12 +1122,18 @@ boolean telekinesis;
|
||||
} else {
|
||||
char qbuf[BUFSZ];
|
||||
long savequan = obj->quan;
|
||||
unsigned textleft;
|
||||
|
||||
obj->quan = *cnt_p;
|
||||
Sprintf(qbuf, "%s %s. Continue?",
|
||||
Strcpy(qbuf,
|
||||
(next_encumbr > HVY_ENCUMBER) ? overloadmsg :
|
||||
(next_encumbr > MOD_ENCUMBER) ? nearloadmsg :
|
||||
moderateloadmsg, doname(obj));
|
||||
moderateloadmsg);
|
||||
textleft = QBUFSZ - (strlen(qbuf) + sizeof(" . Continue?"));
|
||||
Sprintf(eos(qbuf), " %s. Continue?",
|
||||
(strlen(doname(obj)) < textleft) ? doname(obj) :
|
||||
(strlen(simple_typename(obj->otyp)) < textleft) ?
|
||||
an(simple_typename(obj->otyp)) : something);
|
||||
obj->quan = savequan;
|
||||
switch (ynq(qbuf)) {
|
||||
case 'q': result = -1; break;
|
||||
|
||||
Reference in New Issue
Block a user