Crashing on Show Shop [long]

From: Ghost Shaidan (ghost@AO.NET)
Date: 06/12/98


We have been converting zones from other code bases to add in some all
time favorites, and our most recent conversion has about 15 shops in it.
Bringing our total to 112 shops.

The shops are in 2 files, one has 14 shop entries, one has 1.

The file with 1 works fine.  The file with 14 works fine through the first
12.  If I take some out, the last 2 shops work, and it boots up fine even
with all 14 in the file.

If all 14 are in the file however, shop shop crashes us on the last page
of the output (6/6).

I can put in up to 110 shops.  I am thinking we are over running buf in
list_detailed_shop perhaps.  (We have had similar problems when listing
rent files, usually because of the extra chars from our color codes.)

I declared a second var (  char buf2[32768];)  and replace all instances
of buf with buf2 in the list_detailed_shop() function.  We still crash.

There is also a buf1 that is used, but it doesnt look to hold enough for
us to over run it.

The strangest part is the gdb output:

0  0x80a778a in special (ch=0x8c93bf0, cmd=4, arg=0x8102bef "")
    at interpreter.c:1534
1534        if (GET_MOB_SPEC(k) != NULL)
(gdb) bt
#0  0x80a778a in special (ch=0x8c93bf0, cmd=4, arg=0x8102bef "")
    at interpreter.c:1534
#1  0x8062b66 in do_simple_move (ch=0x8c93bf0, dir=3,
    at act.movement.c:171
#2  0x806373d in perform_move (ch=0x8c93bf0, dir=3, need_specials_check=1)
    at act.movement.c:326
#3  0x80b21f8 in mobile_activity () at mobact.c:99
#4  0x804abd6 in heartbeat (pulse=100) at comm.c:727
#5  0x804ab59 in game_loop (mother_desc=3) at comm.c:701
#6  0x8049a27 in init_game (port=5000) at comm.c:275
#7  0x804999c in main (argc=2, argv=0xbffffd98) at comm.c:246
#8  0x804955b in ___crt_dummy__ ()
(gdb) list
1529          if (GET_OBJ_SPEC(i) (ch, i, cmd, arg))
1530            return 1;
1532      /* special in mobile present? */
1533      for (k = world[ch->in_room].people; k; k = k->next_in_room)
1534        if (GET_MOB_SPEC(k) != NULL)
1535          if (GET_MOB_SPEC(k) (ch, k, cmd, arg))
1536            return 1;
1538      /* special in object present? */

Alot of our core files indicate crashes at this spot.  I think when we
over run memory we are over running either a mob or plr or obj index
(sometimes it crashes a few lines further up).

The shop code kind of intimidates me, I have made 2 modifications to it:
We list the objects the shop sells differently (in color and a different
order to make up for some spacing issues due to the color codes).

And I flag everything purchased at a store !SACRIFCE so that people can't
get cheap heals by sacing daggers or papers....

If anyone has any ideas or has run across this before, I would appriciate
anything that would help me through this.

Ghost Shaidan 4000

     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | |

This archive was generated by hypermail 2b30 : 12/15/00 PST