URL:
<http://gna.org/bugs/?17846>
Summary: astring interface/usage encourages memory leaks
Project: Freeciv
Submitted by: jtn
Submitted on: Sat Mar 5 19:03:26 2011
Category: general
Severity: 3 - Normal
Priority: 5 - Normal
Status: None
Assigned to: None
Originator Email:
Open/Closed: Open
Release:
Discussion Lock: Any
Operating System: None
Planned Release:
_______________________________________________________
Details:
The functions in client/text.c (and maybe other places) which return strings
make extensive use of astring internally; each function has an internal static
astring structure (wrapping a malloc'd string) which is used to accumulate
text for the duration of the function call, and then the bare string is
obtained via astr_str() and returned to the caller (who doesn't know or care
that astring is being used).
These text.c functions are erroneously described in comments as returning
pointers to static storage, which most of them haven't done since S2_0 at
least. Many callers aren't freeing their strings, so presumably our clients at
least are leaking memory (I haven't tested this).
The text.c functions return "const char *", so in fact they can't be passed
to free() (or FC_FREE()) without casting away the const (ugh). And the
const-poisoning comes from astr_str(), which also returns "const char *".
Perhaps the original intent of astring was that the lifetime of the string
storage would be tied to the astring itself and be ended with astr_free(), but
that's not how it's being used today.
To fix this I think we need to:
* make astr_str() return "char *" (and comment appropriately)
* propogate this down to those of its callers where it's appropriate
* actually free the strings in the callers-of-callers, etc (tedious)
(Unless I've missed something...)
_______________________________________________________
Reply to this item at:
<http://gna.org/bugs/?17846>
_______________________________________________
Message sent via/by Gna!
http://gna.org/
_______________________________________________
Freeciv-dev mailing list
[email protected]
https://mail.gna.org/listinfo/freeciv-dev