Open
Bug 959745
Opened 11 years ago
Updated 2 years ago
mozilla::Version calls strdup too many times
Categories
(Core :: XPCOM, defect)
Tracking
()
NEW
People
(Reporter: away, Unassigned)
References
Details
This code in XRE_mainInit results in 8 calls to strdup:
> if (mozilla::Version(mAppData->minVersion) > gToolkitVersion ||
> mozilla::Version(mAppData->maxVersion) < gToolkitVersion) {
1. Version constructor on gToolkitVersion
2. Version constructor on mAppData->minVersion
3,4. operator> calls CompareVersions, which strdups both operands
5. Version constructor on gToolkitVersion
6. Version constructor on mAppData->maxVersion
7,8. operator< calls CompareVersions, which strdups both operands
(I noticed this from the corresponding |free| calls while I was debugging memory poisoning code.)
It may be possible to do this without *any* strdup at all. By substituting strncmp for strcmp, and possibly other similar changes, we should be able to avoid writing any nulls into the input string. And these Version objects are so transient that I don't think we have to worry about the underlying strings going away.
(If that level of optimization is unwarranted, I guess we can just remove the strdup from the Version constructor)
Comment 2•11 years ago
|
||
How many of these objects are constructed using string literals? We can write a specialized ctor to avoid copying those ones...
I don't think the strncmp trick will work because basically the Version object currently assumes it does not own the string.
Updated•2 years ago
|
Severity: normal → S3
You need to log in
before you can comment on or make changes to this bug.
Description
•