Re: Strange String BUG

From: Tony Robbins [Kupek] (tonyr@NWPACLINK.COM)
Date: 09/20/98


On Sun, 20 Sep 1998, George wrote:

> On Sat, 19 Sep 1998, Tony Robbins [Kupek] wrote:
>
> >Ok, now you know why I'm hating strings.  Somehow, in this amount of code:
> >
> >(from read_aliases(), standard alias package)
> >    /* get alias file name */
> >    log(GET_NAME(ch));
> >    get_filename(GET_NAME(ch), pcFileName, ALIAS_FILE);
> >
> >the log() works fine, but get_filename insists that GET_NAME(ch) is
> >NULL/0x0.
>
> Are you sure that it's GET_NAME() that is NULL and not the others?
>

Yes.  See debugger output below.

> >    CREATE(victim, struct char_data, 1);
> >    clear_char(victim);
> >    if (load_char(vict, &tmp_store) > -1) {
> >      store_to_char(&tmp_store, victim);
> >      if (GET_LEVEL(victim) <= GET_LEVEL(ch)) {
> >        victim->next = character_list;
> >        character_list = victim;
> >        victim->desc = NULL;
> >        char_to_room(victim, ch->in_room);
> >        read_aliases(victim);  <---- crashes here.
>
> Looks about normal.  GDB backtrace/info locals/list available?

Backtrace says :
#0  get_filename (orig_name=0x0, filename=0xbffff188 "\f@E\001", mode=2)
    at utils.c:454
#1  0x80c2f21 in read_aliases (ch=0x859aad8) at alias.c:87
#2  0x8073245 in do_playerlink (ch=0x859a4f0,
    argument=0xbffffa9e " load kupek", cmd=188, subcmd=0) at act.wizard.c:3297
#3  0x8086063 in command_interpreter (ch=0x859a4f0,
    argument=0xbffffa94 "playerlink load kupek") at interpreter.c:672
#4  0x804a3ce in game_loop (mother_desc=3) at comm.c:807
#5  0x8049aba in init_game (port=4000) at comm.c:402
#6  0x8049a29 in main (argc=3, argv=0xbffffdfc) at comm.c:363

Info locals (inside get_filename)
orig_name = 0x0
mode = 2
prefix = 0x80e1e97 "plrfiles/"
middle = 0x0
suffix = 0x80e1eab "alias"
name = "\200_\021\bH_K\a@\200_\021\b\000\000\000\000pu\r@\020\a@\200_\021\by\035\016\b\\l\030<\n\b\200_\021\b\200_\021\by\035\016\bY\b"
ptr = 0x8115f80 "\204,-"

List
449         break;
450       default:
451         return (0);
452       }
453
454       if (!*orig_name)  <--- crashes here.  This is a symptom though,
                                 not the bug itself.
455         return (0);
456
457       strcpy(name, orig_name);
458       for (ptr = name; *ptr; ptr++)


On a successful load of a character, the debugger says:
81          FILE         *ptFHndl;
82          struct alias_data *pstAliasRec;
83          int           iLen;
84
85          /* get alias file name */
86          log(GET_NAME(ch));
87          get_filename(GET_NAME(ch), pcFileName, ALIAS_FILE);
88
89          /* open alias file */
90          ptFHndl = fopen(pcFileName, "r");

At the log statement, ch->player.name is "Belgarath"
ch = (struct char_data *) 0x859a670
pcFileName = "8c\004@8\003@\004\000\000\000p\000@E\237\000@\001\000-EEEEAEA", '\000' <repeats 20 times>,
"\b\204\004\b|I\016\b0\217\004\b\000\000^\220\035\r\b\224\002R\004\b,\223Y\b\220\035\r\b\000\000\000\000\000\000\000\000\217Y\b\000\000"
ptFHndl = (_IO_FILE *) 0x0
pstAliasRec = (struct alias_data *) 0x0
iLen = 307
(gdb) print ch->player.name
$2 = 0x859a9e8 "Belgarath"

pcFileName is garbage like that because it's never initialized, I believe.
Anyway, that's a successful run.

Same lines as before, at the log statement:
Breakpoint 1, read_aliases (ch=0x859ac58) at alias.c:86
86          log(GET_NAME(ch));
(gdb) print ch->player.name
$3 = 0x859afe8 "Kupek"
(gdb) continue

And next, the infamous:
87          get_filename(GET_NAME(ch), pcFileName, ALIAS_FILE);

Program received signal SIGSEGV, Segmentation fault.
get_filename (orig_name=0x0, filename=0xbffff180 "\f@ ", mode=2)
    at utils.c:454
454       if (!*orig_name)

Sorry for the huge message, but this is about all the information I've
got.  Also, if I change that !*orig_name to orig_name == NULL ||
!*orig_name, I get past this point, but then when playerlink does an act()
involving the linkloaded character, it crashes again.  Where is this guy
getting corrupted ?

-B.


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



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