[devel] [PATCH for apt 26/38] Fix warning about truncation of value of pkgCache::Header::HeaderSz

Dmitry V. Levin ldv на altlinux.org
Чт Дек 12 02:41:05 MSK 2019


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.

> >>   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;

-- 
ldv


Подробная информация о списке рассылки Devel