RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/ CHANGES rpm/lib/ librpm.vers package.c rpm/rpmdb/ head...

From: Jeff Johnson <jbj@rpm5.org>
Date: Sat 08 Sep 2007 - 20:55:46 CEST
Message-Id: <20070908185546.93573348472@rpm5.org>
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   08-Sep-2007 20:55:46
  Branch: HEAD                             Handle: 2007090819554501

  Modified files:
    rpm                     CHANGES
    rpm/lib                 librpm.vers package.c
    rpm/rpmdb               header.c header_internal.c header_internal.h
                            librpmdb.vers

  Log:
    - refactor headerVerifyInfo().

  Summary:
    Revision    Changes     Path
    1.1624      +1  -0      rpm/CHANGES
    1.12        +0  -1      rpm/lib/librpm.vers
    2.152       +0  -50     rpm/lib/package.c
    1.64        +0  -50     rpm/rpmdb/header.c
    1.7         +31 -0      rpm/rpmdb/header_internal.c
    1.18        +62 -0      rpm/rpmdb/header_internal.h
    1.16        +1  -0      rpm/rpmdb/librpmdb.vers
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/CHANGES
  ============================================================================
  $ cvs diff -u -r1.1623 -r1.1624 CHANGES
  --- rpm/CHANGES	8 Sep 2007 18:22:54 -0000	1.1623
  +++ rpm/CHANGES	8 Sep 2007 18:55:45 -0000	1.1624
  @@ -1,4 +1,5 @@
   4.5 -> 5.0:
  +    - jbj: refactor headerVerifyInfo().
       - jbj: pour the amber over the corpse of the rpmlead. Ptooey! R.I.P.
       - jbj: stub in rpmpkgFoo() i/o methods.
       - jbj: refactor rpmlead I/O routines into rpmdb/pkgio.c.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/librpm.vers
  ============================================================================
  $ cvs diff -u -r1.11 -r1.12 librpm.vers
  --- rpm/lib/librpm.vers	8 Sep 2007 16:17:33 -0000	1.11
  +++ rpm/lib/librpm.vers	8 Sep 2007 18:55:45 -0000	1.12
  @@ -36,7 +36,6 @@
       headerCheck;
       headerMergeLegacySigs;
       headerRegenSigHeader;
  -    headerVerifyInfo;
       IDTXfree;
       IDTXglob;
       IDTXgrow;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/lib/package.c
  ============================================================================
  $ cvs diff -u -r2.151 -r2.152 package.c
  --- rpm/lib/package.c	8 Sep 2007 18:22:54 -0000	2.151
  +++ rpm/lib/package.c	8 Sep 2007 18:55:45 -0000	2.152
  @@ -42,56 +42,6 @@
   extern int _nolead;
   extern int _nosigh;
   
  -/**
  - * Alignment needs (and sizeof scalars types) for internal rpm data types.
  - */
  -/*@observer@*/ /*@unchecked@*/
  -static int typeAlign[16] =  {
  -    1,	/*!< RPM_NULL_TYPE */
  -    1,	/*!< RPM_CHAR_TYPE */
  -    1,	/*!< RPM_INT8_TYPE */
  -    2,	/*!< RPM_INT16_TYPE */
  -    4,	/*!< RPM_INT32_TYPE */
  -    8,	/*!< RPM_INT64_TYPE */
  -    1,	/*!< RPM_STRING_TYPE */
  -    1,	/*!< RPM_BIN_TYPE */
  -    1,	/*!< RPM_STRING_ARRAY_TYPE */
  -    1,	/*!< RPM_I18NSTRING_TYPE */
  -    0,
  -    0,
  -    0,
  -    0,
  -    0,
  -    0
  -};
  -
  -/**
  - * Sanity check on no. of tags.
  - * This check imposes a limit of 65K tags, more than enough.
  - */
  -#define hdrchkTags(_ntags)      ((_ntags) & 0xffff0000)
  -
  -/**
  - * Sanity check on type values.
  - */
  -#define hdrchkType(_type) ((_type) < RPM_MIN_TYPE || (_type) > RPM_MAX_TYPE)
  -
  -/**
  - * Sanity check on data size and/or offset and/or count.
  - * This check imposes a limit of 16 MB, more than enough.
  - */
  -#define hdrchkData(_nbytes) ((_nbytes) & 0xff000000)
  -
  -/**
  - * Sanity check on data alignment for data type.
  - */
  -#define hdrchkAlign(_type, _off)	((_off) & (typeAlign[_type]-1))
  -
  -/**
  - * Sanity check on range of data offset.
  - */
  -#define hdrchkRange(_dl, _off)		((_off) < 0 || (_off) > (_dl))
  -
   void headerMergeLegacySigs(Header h, const Header sigh)
   {
       HFD_t hfd = (HFD_t) headerFreeData;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header.c
  ============================================================================
  $ cvs diff -u -r1.63 -r1.64 header.c
  --- rpm/rpmdb/header.c	6 Sep 2007 07:42:22 -0000	1.63
  +++ rpm/rpmdb/header.c	8 Sep 2007 18:55:46 -0000	1.64
  @@ -52,29 +52,6 @@
   };
   
   /** \ingroup header
  - * Alignment needed for header data types.
  - */
  -/*@observer@*/ /*@unchecked@*/
  -static int typeAlign[16] =  {
  -    1,	/*!< RPM_NULL_TYPE */
  -    1,	/*!< RPM_CHAR_TYPE */
  -    1,	/*!< RPM_INT8_TYPE */
  -    2,	/*!< RPM_INT16_TYPE */
  -    4,	/*!< RPM_INT32_TYPE */
  -    8,	/*!< RPM_INT64_TYPE */
  -    1,	/*!< RPM_STRING_TYPE */
  -    1,	/*!< RPM_BIN_TYPE */
  -    1,	/*!< RPM_STRING_ARRAY_TYPE */
  -    1,	/*!< RPM_I18NSTRING_TYPE */
  -    1,  /*!< RPM_ASN1_TYPE */
  -    1,  /*!< RPM_OPENPGP_TYPE */
  -    0,
  -    0,
  -    0,
  -    0
  -};
  -
  -/** \ingroup header
    * Size of header data types.
    */
   /*@observer@*/ /*@unchecked@*/
  @@ -103,33 +80,6 @@
   /*@unchecked@*/
   static size_t headerMaxbytes = (32*1024*1024);
   
  -/**
  - * Sanity check on no. of tags.
  - * This check imposes a limit of 65K tags, more than enough.
  - */ 
  -#define hdrchkTags(_ntags)	((_ntags) & 0xffff0000)
  -
  -/**
  - * Sanity check on type values.
  - */
  -#define hdrchkType(_type) ((_type) < RPM_MIN_TYPE || (_type) > RPM_MAX_TYPE)
  -
  -/**
  - * Sanity check on data size and/or offset and/or count.
  - * This check imposes a limit of 16Mb, more than enough.
  - */ 
  -#define hdrchkData(_nbytes)	((_nbytes) & 0xff000000)
  -
  -/**
  - * Sanity check on alignment for data type.
  - */
  -#define hdrchkAlign(_type, _off)	((_off) & (typeAlign[_type]-1))
  -
  -/**
  - * Sanity check on range of data offset.
  - */
  -#define hdrchkRange(_dl, _off)		((_off) < 0 || (_off) > (_dl))
  -
   /*@observer@*/ /*@unchecked@*/
   HV_t hdrVec;	/* forward reference */
   
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header_internal.c
  ============================================================================
  $ cvs diff -u -r1.6 -r1.7 header_internal.c
  --- rpm/rpmdb/header_internal.c	9 Jun 2007 19:08:00 -0000	1.6
  +++ rpm/rpmdb/header_internal.c	8 Sep 2007 18:55:46 -0000	1.7
  @@ -9,6 +9,37 @@
   
   #include "debug.h"
   
  +int headerVerifyInfo(int il, int dl, const void * pev, void * iv, int negate)
  +{
  +/*@-castexpose@*/
  +    entryInfo pe = (entryInfo) pev;
  +/*@=castexpose@*/
  +    entryInfo info = iv;
  +    int i;
  +
  +/*@-boundsread@*/
  +    for (i = 0; i < il; i++) {
  +	info->tag = ntohl(pe[i].tag);
  +	info->type = ntohl(pe[i].type);
  +	info->offset = ntohl(pe[i].offset);
  +	if (negate)
  +	    info->offset = -info->offset;
  +	info->count = ntohl(pe[i].count);
  +
  +	if (hdrchkType(info->type))
  +	    return i;
  +	if (hdrchkAlign(info->type, info->offset))
  +	    return i;
  +	if (!negate && hdrchkRange(dl, info->offset))
  +	    return i;
  +	if (hdrchkData(info->count))
  +	    return i;
  +
  +    }
  +/*@=boundsread@*/
  +    return -1;
  +}
  +
   /*@-boundswrite@*/
   char ** headerGetLangs(Header h)
   {
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/header_internal.h
  ============================================================================
  $ cvs diff -u -r1.17 -r1.18 header_internal.h
  --- rpm/rpmdb/header_internal.h	19 Aug 2007 21:12:23 -0000	1.17
  +++ rpm/rpmdb/header_internal.h	8 Sep 2007 18:55:46 -0000	1.18
  @@ -11,6 +11,56 @@
   #include <netinet/in.h>
   #endif  /* __LCLINT__ */
   
  +/**
  + * Alignment needs (and sizeof scalars types) for internal rpm data types.
  + */
  +/*@observer@*/ /*@unchecked@*/
  +static int typeAlign[16] =  {
  +    1,	/*!< RPM_NULL_TYPE */
  +    1,	/*!< RPM_CHAR_TYPE */
  +    1,	/*!< RPM_INT8_TYPE */
  +    2,	/*!< RPM_INT16_TYPE */
  +    4,	/*!< RPM_INT32_TYPE */
  +    8,	/*!< RPM_INT64_TYPE */
  +    1,	/*!< RPM_STRING_TYPE */
  +    1,	/*!< RPM_BIN_TYPE */
  +    1,	/*!< RPM_STRING_ARRAY_TYPE */
  +    1,	/*!< RPM_I18NSTRING_TYPE */
  +    0,
  +    0,
  +    0,
  +    0,
  +    0,
  +    0
  +};
  +
  +/**
  + * Sanity check on no. of tags.
  + * This check imposes a limit of 65K tags, more than enough.
  + */
  +#define hdrchkTags(_ntags)      ((_ntags) & 0xffff0000)
  +
  +/**
  + * Sanity check on type values.
  + */
  +#define hdrchkType(_type) ((_type) < RPM_MIN_TYPE || (_type) > RPM_MAX_TYPE)
  +
  +/**
  + * Sanity check on data size and/or offset and/or count.
  + * This check imposes a limit of 16 MB, more than enough.
  + */
  +#define hdrchkData(_nbytes) ((_nbytes) & 0xff000000)
  +
  +/**
  + * Sanity check on data alignment for data type.
  + */
  +#define hdrchkAlign(_type, _off)	((_off) & (typeAlign[_type]-1))
  +
  +/**
  + * Sanity check on range of data offset.
  + */
  +#define hdrchkRange(_dl, _off)		((_off) < 0 || (_off) > (_dl))
  +
   #define	INDEX_MALLOC_SIZE	8
   
   /*
  @@ -150,6 +200,18 @@
   extern "C" {
   #endif
   
  +/**
  + * Perform simple sanity and range checks on header tag(s).
  + * @param il		no. of tags in header
  + * @param dl		no. of bytes in header data.
  + * @param pev		1st element in tag array, big-endian
  + * @param iv		failing (or last) tag element, host-endian
  + * @param negate	negative offset expected?
  + * @return		-1 on success, otherwise failing tag element index
  + */
  +int headerVerifyInfo(int il, int dl, const void * pev, void * iv, int negate)
  +	/*@modifies *iv @*/;
  +
   /** \ingroup header
    * Return array of locales found in header.
    * The array is terminated with a NULL sentinel.
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmdb/librpmdb.vers
  ============================================================================
  $ cvs diff -u -r1.15 -r1.16 librpmdb.vers
  --- rpm/rpmdb/librpmdb.vers	8 Sep 2007 18:22:56 -0000	1.15
  +++ rpm/rpmdb/librpmdb.vers	8 Sep 2007 18:55:46 -0000	1.16
  @@ -35,6 +35,7 @@
       headerMacrosLoad;
       headerMacrosUnload;
       headerNEVRA;
  +    headerVerifyInfo;
       hGetColor;
       _init;
       _nolead;
  @@ .
Received on Sat Sep 8 20:55:46 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.