[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