
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 >>