OpenPKG CVS Repository
  http://cvs.openpkg.org/
  ____________________________________________________________________________

  Server: cvs.openpkg.org                  Name:   Ralf S. Engelschall
  Root:   /v/openpkg/cvs                   Email:  [EMAIL PROTECTED]
  Module: openpkg-src                      Date:   05-Sep-2005 16:48:03
  Branch: HEAD                             Handle: 2005090515480200

  Modified files:
    openpkg-src/tin         tin.patch tin.spec

  Log:
    apply Security Fix (CAN-2005-2491)

  Summary:
    Revision    Changes     Path
    1.2         +111 -0     openpkg-src/tin/tin.patch
    1.45        +1  -1      openpkg-src/tin/tin.spec
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: openpkg-src/tin/tin.patch
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 tin.patch
  --- openpkg-src/tin/tin.patch 4 Jul 2002 08:41:01 -0000       1.1
  +++ openpkg-src/tin/tin.patch 5 Sep 2005 14:48:02 -0000       1.2
  @@ -10,3 +10,114 @@
    /*
     * defines to control GNKSA-checks behaviour:
     * - ENFORCE_RFC1034
  +
  
+------------------------------------------------------------------------------
  +
  +Security Fix (CAN-2005-2491)
  +
  +Index: pcre/pcre.c
  +--- pcre/pcre.c.orig 2003-08-10 15:27:36 +0200
  ++++ pcre/pcre.c      2005-09-05 16:43:29 +0200
  +@@ -908,7 +908,18 @@
  + int min = 0;
  + int max = -1;
  + 
  ++/* Read the minimum value and do a paranoid check: a negative value 
indicates
  ++an integer overflow. */
  ++
  + while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
  ++if (min < 0 || min > 65535)
  ++  {
  ++  *errorptr = ERR5;
  ++  return p;
  ++  }
  ++
  ++/* Read the maximum value if there is one, and again do a paranoid on its 
size.
  ++Also, max must not be less than min. */
  + 
  + if (*p == '}') max = min; else
  +   {
  +@@ -916,6 +927,11 @@
  +     {
  +     max = 0;
  +     while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
  ++    if (max < 0 || max > 65535)
  ++      {
  ++      *errorptr = ERR5;
  ++      return p;
  ++      }
  +     if (max < min)
  +       {
  +       *errorptr = ERR4;
  +@@ -3765,6 +3781,7 @@
  + BOOL class_utf8;
  + #endif
  + BOOL inescq = FALSE;
  ++BOOL capturing;
  + unsigned int brastackptr = 0;
  + size_t size;
  + uschar *code;
  +@@ -4169,6 +4186,7 @@
  +     case '(':
  +     branch_newextra = 0;
  +     bracket_length = 1 + LINK_SIZE;
  ++    capturing = FALSE;
  + 
  +     /* Handle special forms of bracket, which all start (? */
  + 
  +@@ -4256,6 +4274,9 @@
  + 
  +         case 'P':
  +         ptr += 3;
  ++
  ++        /* Handle the definition of a named subpattern */
  ++
  +         if (*ptr == '<')
  +           {
  +           const uschar *p;    /* Don't amalgamate; some compilers */
  +@@ -4268,9 +4289,12 @@
  +             }
  +           name_count++;
  +           if (ptr - p > max_name_size) max_name_size = (ptr - p);
  ++          capturing = TRUE;   /* Named parentheses are always capturing */
  +           break;
  +           }
  + 
  ++        /* Handle back references and recursive calls to named subpatterns 
*/
  ++
  +         if (*ptr == '=' || *ptr == '>')
  +           {
  +           while ((compile_block.ctypes[*(++ptr)] & ctype_word) != 0);
  +@@ -4445,18 +4469,24 @@
  +           continue;
  +           }
  + 
  +-        /* If options were terminated by ':' control comes here. Fall 
through
  +-        to handle the group below. */
  ++        /* If options were terminated by ':' control comes here. This is a
  ++        non-capturing group with an options change. There is nothing more 
that
  ++        needs to be done because "capturing" is already set FALSE by 
default;
  ++        we can just fall through. */
  ++
  +         }
  +       }
  + 
  +-    /* Extracting brackets must be counted so we can process escapes in a
  +-    Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
  +-    need an additional 3 bytes of store per extracting bracket. However, if
  +-    PCRE_NO_AUTO)CAPTURE is set, unadorned brackets become non-capturing, 
so we
  +-    must leave the count alone (it will aways be zero). */
  ++    /* Ordinary parentheses, not followed by '?', are capturing unless
  ++    PCRE_NO_AUTO_CAPTURE is set. */
  ++
  ++    else capturing = (options & PCRE_NO_AUTO_CAPTURE) == 0;
  ++
  ++    /* Capturing brackets must be counted so we can process escapes in a
  ++    Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to 
need
  ++    an additional 3 bytes of memory per capturing bracket. */
  + 
  +-    else if ((options & PCRE_NO_AUTO_CAPTURE) == 0)
  ++    if (capturing)
  +       {
  +       bracount++;
  +       if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
  @@ .
  patch -p0 <<'@@ .'
  Index: openpkg-src/tin/tin.spec
  ============================================================================
  $ cvs diff -u -r1.44 -r1.45 tin.spec
  --- openpkg-src/tin/tin.spec  24 Mar 2005 11:20:30 -0000      1.44
  +++ openpkg-src/tin/tin.spec  5 Sep 2005 14:48:02 -0000       1.45
  @@ -37,7 +37,7 @@
   Group:        News
   License:      GPL
   Version:      %{V_major}.%{V_minor}
  -Release:      20040207
  +Release:      20050905
   
   #   list of sources
   Source0:      
ftp://ftp.tin.org/pub/news/clients/tin/v%{V_major}/tin-%{version}.tar.bz2
  @@ .
______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
CVS Repository Commit List                     [email protected]

Reply via email to