Login
User Name:

Password:



Register
Forgot your password?
Vote for Us!
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
Bug in get_exp_worth( )
Oct 10, 2017, 1:26 am
By GatewaySysop
Bug in do_drag( )
Oct 8, 2017, 12:40 am
By GatewaySysop
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
Beastmaster 6D sound files
Author: Vladaar
Submitted by: Vladaar
Users Online
CommonCrawl, Yandex, DotBot

Members: 0
Guests: 4
Stats
Files
Topics
Posts
Members
Newest Member
476
3,704
19,231
608
LAntorcha
Today's Birthdays
There are no member birthdays today.
Related Links
» SmaugMuds.org » Codebases » SWFOTE FUSS » Introduction system can corru...
Forum Rules | Mark all | Recent Posts

Introduction system can corrupt character names
< Newer Topic :: Older Topic >

Pages:<< prev 1 next >>
Post is unread #1 Sep 29, 2006, 11:36 pm   Last edited Sep 30, 2006, 10:23 am 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

Basically a friend of mine (Phoenix Dracul) came across this problem. Since the fellow data is now freed up properly there are a few new problems because of the way the old introduction system handled a few of its pointers. What's happening is that it sets fellow->victim like so:
fellow->vicitm = victim->name;

This makes fellow->victim point to the same piece of memory as victim->name and if the character that has remembered the name logs out it frees that space up, corrupting the player names. Neeless to say, this is a critical bug that can cause a lot of problems.

The fix:
in: act_info.c, function: do_remember find--
   CREATE( nfellow, FELLOW_DATA, 1 );
   nfellow->victim = victim->name;
   nfellow->knownas = STRALLOC( argument );
   LINK( nfellow, ch->first_fellow, ch->last_fellow, next, prev );


and change to:
   CREATE( nfellow, FELLOW_DATA, 1 );
   nfellow->victim = STRALLOC(victim->name);
   nfellow->knownas = STRALLOC( argument );
   LINK( nfellow, ch->first_fellow, ch->last_fellow, next, prev );


in do_describe find:
         CREATE( nfellow, FELLOW_DATA, 1 );
         nfellow->victim = fellow->victim;
         nfellow->knownas = fellow->knownas;
         LINK( nfellow, victim->first_fellow, victim->last_fellow, next, prev );


and change to:
         CREATE( nfellow, FELLOW_DATA, 1 );
         nfellow->victim = STRALLOC(fellow->victim);
         nfellow->knownas = STRALLOC( fellow->knownas );
         LINK( nfellow, victim->first_fellow, victim->last_fellow, next, prev );


in do_introduce find:
   CREATE( fellow, FELLOW_DATA, 1 );
   fellow->victim = ch->name;
   fellow->knownas = STRALLOC( argument );
   LINK( fellow, victim->first_fellow, victim->last_fellow, next, prev );


and change to:
   CREATE( fellow, FELLOW_DATA, 1 );
   fellow->victim = STRALLOC(ch->name);
   fellow->knownas = STRALLOC( argument );
   LINK( fellow, victim->first_fellow, victim->last_fellow, next, prev );


This way each character has thier own memory allocated pointers, which are properly freed when the character quits.

Happy Coding,
KeB
       
Pages:<< prev 1 next >>