[devel] [PATCH for apt 26/38] Fix warning about truncation of value of pkgCache::Header::HeaderSz
Aleksei Nikiforov
darktemplar на altlinux.org
Чт Дек 12 10:38:02 MSK 2019
12.12.2019 2:41, Dmitry V. Levin пишет:
> On Wed, Dec 11, 2019 at 10:51:28AM +0300, Aleksei Nikiforov wrote:
>> 11.12.2019 1:58, Dmitry V. Levin пишет:
>>> On Tue, Dec 10, 2019 at 06:23:31PM +0300, Aleksei Nikiforov wrote:
>>>> Update types of other variables as well.
>>>
>>> What's the rationale for changing types of *all* these fields,
>>> and for choosing architecture-dependent "unsigned long"
>>> as the new type instead of "unsigned short"?
>>
>> Value of HeaderSz is truncated. IIRC, assigned value was around 270k.
>> Types of other variables were changed for uniformity and possible
>> mitigation of same overflow issues in future, but may be reverted for
>> now. Since type wasn't architecture-independent, similar
>> architecture-dependent type of bigger size was used. All of this may be
>> changed as needed, with only exception of keeping size of HeaderSz
>> increased.
>
> How many objects containing struct pkgCache::Header are created?
> If there are just a few of them, then we don't have to worry about
> the memory footprint and can make them all unsigned long (== size_t)
> as you did in your patch.
>
One object created per pkgCacheGenerator instance AFAIK, so it
translates to one per memory map, i.e. usually one per application instance.
>>>> apt/apt-pkg/pkgcache.h | 14 +++++++-------
>>>> 1 file changed, 7 insertions(+), 7 deletions(-)
>>>>
>>>> diff --git a/apt/apt-pkg/pkgcache.h b/apt/apt-pkg/pkgcache.h
>>>> index 05a63bc..6b44522 100644
>>>> --- a/apt/apt-pkg/pkgcache.h
>>>> +++ b/apt/apt-pkg/pkgcache.h
>>>> @@ -175,13 +175,13 @@ struct pkgCache::Header
>>>> unsigned long OptionsHash;
>>>>
>>>> // Size of structure values
>>>> - unsigned short HeaderSz;
>>>> - unsigned short PackageSz;
>>>> - unsigned short PackageFileSz;
>>>> - unsigned short VersionSz;
>>>> - unsigned short DependencySz;
>>>> - unsigned short ProvidesSz;
>>>> - unsigned short VerFileSz;
>>>> + unsigned long HeaderSz;
>>>> + unsigned long PackageSz;
>>>> + unsigned long PackageFileSz;
>>>> + unsigned long VersionSz;
>>>> + unsigned long DependencySz;
>>>> + unsigned long ProvidesSz;
>>>> + unsigned long VerFileSz;
>>>>
>>>> // Structure counts
>>>> unsigned long PackageCount;
>
Подробная информация о списке рассылки Devel