memory issue while writing to registrydb

Joshua Root jmr at macports.org
Mon Jul 10 21:17:48 UTC 2017


On 2017-7-11 06:14 , Umesh Singla wrote:
> Hi
> 
> I'm running into an issue while storing port variants into another table 
> in the registry database. The output is different every time and breaks 
> at different places (though I can expect such erroneous behavior in case 
> of such errors), many times finishing successfully.
> 
> The common error which it gives me is:
> 
> ----
> tclsh8.5(25738,0x7fff9815d3c0) malloc: *** error for object 
> 0x7f8e005023b8: incorrect checksum for freed object - object was 
> probably modified after being freed.
> 
> *** set a breakpoint in malloc_error_break to debug
> 
> ----
> 
> I tried debugging a lot for over a day but not able to find anything.
> 
> Sometimes, it gives me a Segmentation fault or Abort error: 6, all of 
> them indicating an issue with memory management.
> 
> If someone can try replicating the error, it'd be great. The repo is 
> here [1]. The issue seems to be around here [2] in this function. After 
> `make`, `sudo make install`, all you have to run is 
> `<install-directory>/bin/port snapshot`.
> 
> I am only using vim for development and unable to add any breakpoints 
> and use GDB since it walks through Tcl.
> 
> 
> [1]: https://github.com/umeshksingla/macports-base/tree/gsoc17-migrate
> 
> [2]: 
> https://github.com/umeshksingla/macports-base/blob/gsoc17-migrate/src/cregistry/entry.c#L1422

all_variants = (variant*) malloc(sizeof(variant));

You are only allocating enough memory for one variant struct here, but 
then go on to treat it as an array. Also there's no error checking.

- Josh


More information about the macports-dev mailing list