Hi Lianbo,

-----Original Message-----
> This reminds me, if parse_line() or dump_struct_member() fails, is there a 
> potential risk of memory leaks
> in the dump_struct_members()?
> 
> file: sbitmap.c
> 432 static void dump_struct_members(const char *s, ulong addr, unsigned radix)
> 433 {
> 434         int i, argc;
> 435         char *p1, *p2;
> 436         char *structname, *members;
> 437         char *arglist[MAXARGS];
> 438
> 439         structname = GETBUF(strlen(s) + 1);
> 440         members = GETBUF(strlen(s) + 1);
> 441
> 442         strcpy(structname, s);
> 443         p1 = strstr(structname, ".") + 1;
> 444
> 445         p2 = strstr(s, ".") + 1;
> 446         strcpy(members, p2);
> 447         replace_string(members, ",", ' ');
> 448         argc = parse_line(members, arglist);
> 449
> 450         for (i = 0; i < argc; i++) {
> 451                 *p1 = NULLCHAR;
> 452                 strcat(structname, arglist[i]);
> 453                 dump_struct_member(structname, addr, radix);
> 454         }
> 455
> 456         FREEBUF(structname);
> 457         FREEBUF(members);
> 458 }
> 
> 
> I noticed that the parse_line() has a return value, but the 
> dump_struct_member() has no return value, is
> there a good way to avoid the potential risks? Or leave it there?
> 
> BTW: I saw the similar issues in tools.c

um, the fact is, all buffers that GETBUF() allocates will be freed automatically
after the last command execution in free_all_bufs():

main_loop
  while (TRUE) {
    process_command_line
      restore_sanity
        free_all_bufs <<--
    exec_command
  }

so to free all buffers is better coding practice and has several pros if you 
can,
but it's not necessary to work too hard for it.

Thanks,
Kazu


> 
> Thanks.
> Lianbo
> 
> 
>       @@ -272,7 +272,7 @@ static void __sbitmap_for_each_set(const struct 
> sbitmap_context *sc,
>                               if (nr >= depth)
>                                       break;
>                               if (!fn((index << sc->shift) + nr, data))
>       -                               return;
>       +                               goto exit;
> 
>                               nr++;
>                       }
>       @@ -282,6 +282,7 @@ next:
>                               index = 0;
>               }
> 
>       +exit:
>               FREEBUF(sbitmap_word_buf);
>        }
> 
>       --
>       2.25.1
> 

--
Crash-utility mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to