Login
User Name:

Password:



Register
Forgot your password?
Vote for Us!
 parse description bug
Yesterday, 10:08 pm
By Remcon
Couple bugs
Dec 12, 2017, 5:42 pm
By Remcon
Bug in disarm( )
Nov 12, 2017, 6:54 pm
By GatewaySysop
Bug in will_fall( )
Oct 23, 2017, 1:35 am
By GatewaySysop
Bug in do_zap( ), do_brandish( )
Oct 18, 2017, 1:52 pm
By GatewaySysop
LOP 1.45
Author: Remcon
Submitted by: Remcon
LOP Heroes Edition
Author: Vladaar
Submitted by: Vladaar
Heroes sound extras
Author: Vladaar
Submitted by: Vladaar
6Dragons 4.3
Author: Vladaar
Submitted by: Vladaar
Memwatch
Author: Johan Lindh
Submitted by: Vladaar
Users Online
CommonCrawl, Yandex, Yahoo!, DotBot, Bing, Google

Members: 0
Guests: 8
Stats
Files
Topics
Posts
Members
Newest Member
477
3,706
19,240
608
LAntorcha
Today's Birthdays
There are no member birthdays today.
Related Links
» SmaugMuds.org » Bugfix Lists » SWFOTE FUSS Bugfix List » [Bug] Mcreate, ocreate, goto ...
Forum Rules | Mark all | Recent Posts

[Bug] Mcreate, ocreate, goto lack proper vnum verification
< Newer Topic :: Older Topic >

Pages:<< prev 1 next >>
Post is unread #1 Dec 21, 2008, 6:55 pm   Last edited Dec 22, 2008, 12:05 pm by Keberus
Go to the top of the page
Go to the bottom of the page

Keberus
Conjurer
GroupFUSS Project Team
Posts341
JoinedJun 4, 2005

Bug: Mcreate, ocreate, goto lack proper vnum verification.
Danger: Medium - Though it won't corrupt area files, created mobs/object/rooms may not save.
Found by: Pyreloth
Fixed by: Keberus

---


build.c

At the bottom add:
/* Is valid vnum checks to make sure an area has the valid vnum for any type
   types: 0=room, 1=obj, 2=mob                     -->Keberus 12/03/08 */
bool is_valid_vnum( int vnum, short type )
{
   AREA_DATA *area;
   int low_value =-1, hi_value =-1;
   bool isValid = FALSE;

   if( (type < VCHECK_ROOM) || (type > VCHECK_MOB) )
   {
       bug( "is_valid_vnum: bad type %d", type );
       return FALSE;
   }
   for( area = first_area; area; area = area->next )
   {
        if( type == VCHECK_ROOM )
        {
            low_value = area->low_r_vnum;
            hi_value = area->hi_r_vnum;
        }
        else if( type == VCHECK_OBJ )
        {
            low_value = area->low_o_vnum;
            hi_value = area->hi_o_vnum;
        }
        else
        {
            low_value = area->low_m_vnum;
            hi_value = area->hi_m_vnum;
        }

        if( (vnum >= low_value) && (vnum <= hi_value ) )
        {
            isValid = TRUE;
            break;
        }
   }
   return isValid;
}



build.c, do_goto

Locate:
      location = make_room( vnum, ch->pcdata->area );


Above that add:
      if( !is_valid_vnum( vnum, VCHECK_ROOM ) )
      {
         ch_printf( ch, "&YSorry, &G%d &RIS NOT &Ya valid vnum!\r\n", vnum );
         return;
      }



build.c, do_mcreate

Locate:
   pMobIndex = make_mobile( vnum, cvnum, argument );


Above it add:
      if( !is_valid_vnum( vnum, VCHECK_MOB ) )
      {
         ch_printf( ch, "&YSorry, &G%d &RIS NOT &Ya valid vnum!\r\n", vnum );
         return;
      }



build.c, do_ocreate

Find:
   pObjIndex = make_object( vnum, cvnum, argument );


Above it add:
      if( !is_valid_vnum( vnum, VCHECK_OBJ ) )
      {
         ch_printf( ch, "&YSorry, &G%d &RIS NOT &Ya valid vnum!\r\n", vnum );
         return;
      }



mud.h

At the bottom add:
#define VCHECK_ROOM 0
#define VCHECK_OBJ 1
#define VCHECK_MOB 2
bool is_valid_vnum( int vnum, short type );


This fix will make sure that immortals can't ocreate, mcreate, or use goto on vnums that aren't with in the range of an area.
This will make sure any room/object/mobile that is created is within range of an area so they can can be saved and loaded back in
properly.
       
Pages:<< prev 1 next >>