Pages:<< prev 1 next >>
Off the Edge of the Map

GroupAdministrators
Posts1,199
JoinedMar 21, 2006
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:
build.c, do_goto
Locate:
Above that add:
build.c, do_mcreate
Locate:
Above it add:
build.c, do_ocreate
Find:
Above it add:
mud.h
At the bottom add:
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.
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 >>