Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=python26.git;a=commitdiff;h=f6193d5cfd211c705787f1ee3ee2f313a7fc405e

commit f6193d5cfd211c705787f1ee3ee2f313a7fc405e
Author: Miklos Vajna <[email protected]>
Date:   Fri Dec 26 14:58:36 2008 +0100

python-2.6.1-1-i686

- version bump

diff --git a/source/devel/python/CVE-2008-1679.patch 
b/source/devel/python/CVE-2008-1679.patch
deleted file mode 100644
index 0b6ec97..0000000
--- a/source/devel/python/CVE-2008-1679.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- Python-2.5.2-orig+CVE-2007-4965/Modules/imageop.c  2008-04-07 
16:13:42.000000000 -0700
-+++ Python-2.5.2/Modules/imageop.c     2008-04-07 16:10:21.000000000 -0700
-@@ -640,6 +640,11 @@
-               PyErr_SetString(ImageopError, "String has incorrect length");
-               return 0;
-       }
-+
-+      if ( nlen / x != y || nlen > INT_MAX / 4) {
-+              PyErr_SetString(ImageopError, "Image is too large");
-+              return 0;
-+      }
-
-       rv = PyString_FromStringAndSize(NULL, nlen*4);
-       if ( rv == 0 )
-@@ -743,6 +748,11 @@
-               PyErr_SetString(ImageopError, "String has incorrect length");
-               return 0;
-       }
-+
-+      if ( nlen / x != y || nlen > INT_MAX / 4) {
-+              PyErr_SetString(ImageopError, "Image is too large");
-+              return 0;
-+      }
-
-       rv = PyString_FromStringAndSize(NULL, nlen*4);
-       if ( rv == 0 )
diff --git a/source/devel/python/CVE-2008-2315.patch 
b/source/devel/python/CVE-2008-2315.patch
deleted file mode 100644
index 19a654b..0000000
--- a/source/devel/python/CVE-2008-2315.patch
+++ /dev/null
@@ -1,581 +0,0 @@
-Index: Python-2.5.2/Objects/unicodeobject.c
-===================================================================
---- Python-2.5.2.orig/Objects/unicodeobject.c
-+++ Python-2.5.2/Objects/unicodeobject.c
-@@ -240,6 +240,11 @@ PyUnicodeObject *_PyUnicode_New(Py_ssize
-         return unicode_empty;
-     }
-
-+    /* Ensure we won't overflow the size. */
-+    if (length > ((PY_SSIZE_T_MAX / sizeof(Py_UNICODE)) - 1)) {
-+        return (PyUnicodeObject *)PyErr_NoMemory();
-+    }
-+
-     /* Unicode freelist & memory allocation */
-     if (unicode_freelist) {
-         unicode = unicode_freelist;
-@@ -1102,6 +1107,9 @@ PyObject *PyUnicode_EncodeUTF7(const Py_
-     char * out;
-     char * start;
-
-+    if (cbAllocated / 5 != size)
-+        return PyErr_NoMemory();
-+
-     if (size == 0)
-               return PyString_FromStringAndSize(NULL, 0);
-
-@@ -1700,8 +1708,9 @@ PyUnicode_EncodeUTF16(const Py_UNICODE *
- {
-     PyObject *v;
-     unsigned char *p;
-+    Py_ssize_t nsize, bytesize;
- #ifdef Py_UNICODE_WIDE
--    int i, pairs;
-+    Py_ssize_t i, pairs;
- #else
-     const int pairs = 0;
- #endif
-@@ -1724,8 +1733,15 @@ PyUnicode_EncodeUTF16(const Py_UNICODE *
-       if (s[i] >= 0x10000)
-           pairs++;
- #endif
--    v = PyString_FromStringAndSize(NULL,
--                2 * (size + pairs + (byteorder == 0)));
-+    /* 2 * (size + pairs + (byteorder == 0)) */
-+    if (size > PY_SSIZE_T_MAX ||
-+      size > PY_SSIZE_T_MAX - pairs - (byteorder == 0))
-+      return PyErr_NoMemory();
-+    nsize = (size + pairs + (byteorder == 0));
-+    bytesize = nsize * 2;
-+    if (bytesize / 2 != nsize)
-+      return PyErr_NoMemory();
-+    v = PyString_FromStringAndSize(NULL, bytesize);
-     if (v == NULL)
-         return NULL;
-
-@@ -2053,6 +2069,11 @@ PyObject *unicodeescape_string(const Py_
-     char *p;
-
-     static const char *hexdigit = "0123456789abcdef";
-+#ifdef Py_UNICODE_WIDE
-+    const Py_ssize_t expandsize = 10;
-+#else
-+    const Py_ssize_t expandsize = 6;
-+#endif
-
-     /* Initial allocation is based on the longest-possible unichr
-        escape.
-@@ -2068,13 +2089,12 @@ PyObject *unicodeescape_string(const Py_
-        escape.
-     */
-
-+    if (size > (PY_SSIZE_T_MAX - 2 - 1) / expandsize)
-+      return PyErr_NoMemory();
-+
-     repr = PyString_FromStringAndSize(NULL,
-         2
--#ifdef Py_UNICODE_WIDE
--        + 10*size
--#else
--        + 6*size
--#endif
-+        + expandsize*size
-         + 1);
-     if (repr == NULL)
-         return NULL;
-@@ -2315,12 +2335,16 @@ PyObject *PyUnicode_EncodeRawUnicodeEsca
-     char *q;
-
-     static const char *hexdigit = "0123456789abcdef";
--
- #ifdef Py_UNICODE_WIDE
--    repr = PyString_FromStringAndSize(NULL, 10 * size);
-+    const Py_ssize_t expandsize = 10;
- #else
--    repr = PyString_FromStringAndSize(NULL, 6 * size);
-+    const Py_ssize_t expandsize = 6;
- #endif
-+
-+    if (size > PY_SSIZE_T_MAX / expandsize)
-+      return PyErr_NoMemory();
-+
-+    repr = PyString_FromStringAndSize(NULL, expandsize * size);
-     if (repr == NULL)
-         return NULL;
-     if (size == 0)
-@@ -4730,6 +4754,11 @@ PyUnicodeObject *pad(PyUnicodeObject *se
-         return self;
-     }
-
-+    if (left > PY_SSIZE_T_MAX - self->length ||
-+      right > PY_SSIZE_T_MAX - (left + self->length)) {
-+        PyErr_SetString(PyExc_OverflowError, "padded string is too long");
-+        return NULL;
-+    }
-     u = _PyUnicode_New(left + self->length + right);
-     if (u) {
-         if (left)
-Index: Python-2.5.2/Objects/tupleobject.c
-===================================================================
---- Python-2.5.2.orig/Objects/tupleobject.c
-+++ Python-2.5.2/Objects/tupleobject.c
-@@ -60,11 +60,12 @@ PyTuple_New(register Py_ssize_t size)
-               Py_ssize_t nbytes = size * sizeof(PyObject *);
-               /* Check for overflow */
-               if (nbytes / sizeof(PyObject *) != (size_t)size ||
--                  (nbytes += sizeof(PyTupleObject) - sizeof(PyObject *))
--                  <= 0)
-+                  (nbytes > PY_SSIZE_T_MAX - sizeof(PyTupleObject) - 
sizeof(PyObject *)))
-               {
-                       return PyErr_NoMemory();
-               }
-+              nbytes += sizeof(PyTupleObject) - sizeof(PyObject *);
-+
-               op = PyObject_GC_NewVar(PyTupleObject, &PyTuple_Type, size);
-               if (op == NULL)
-                       return NULL;
-Index: Python-2.5.2/Objects/bufferobject.c
-===================================================================
---- Python-2.5.2.orig/Objects/bufferobject.c
-+++ Python-2.5.2/Objects/bufferobject.c
-@@ -427,6 +427,10 @@ buffer_repeat(PyBufferObject *self, Py_s
-               count = 0;
-       if (!get_buf(self, &ptr, &size, ANY_BUFFER))
-               return NULL;
-+      if (count > PY_SSIZE_T_MAX / size) {
-+              PyErr_SetString(PyExc_MemoryError, "result too large");
-+              return NULL;
-+      }
-       ob = PyString_FromStringAndSize(NULL, size * count);
-       if ( ob == NULL )
-               return NULL;
-Index: Python-2.5.2/Objects/longobject.c
-===================================================================
---- Python-2.5.2.orig/Objects/longobject.c
-+++ Python-2.5.2/Objects/longobject.c
-@@ -70,6 +70,8 @@ _PyLong_New(Py_ssize_t size)
-               PyErr_NoMemory();
-               return NULL;
-       }
-+      /* XXX(nnorwitz): This can overflow --
-+         PyObject_NEW_VAR /  _PyObject_VAR_SIZE need to detect overflow */
-       return PyObject_NEW_VAR(PyLongObject, &PyLong_Type, size);
- }
-
-Index: Python-2.5.2/Objects/stringobject.c
-===================================================================
---- Python-2.5.2.orig/Objects/stringobject.c
-+++ Python-2.5.2/Objects/stringobject.c
-@@ -76,6 +76,11 @@ PyString_FromStringAndSize(const char *s
-               return (PyObject *)op;
-       }
-
-+      if (size > PY_SSIZE_T_MAX - sizeof(PyStringObject)) {
-+              PyErr_SetString(PyExc_OverflowError, "string is too large");
-+              return NULL;
-+      }
-+
-       /* Inline PyObject_NewVar */
-       op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
-       if (op == NULL)
-@@ -111,7 +116,7 @@ PyString_FromString(const char *str)
-
-       assert(str != NULL);
-       size = strlen(str);
--      if (size > PY_SSIZE_T_MAX) {
-+      if (size > PY_SSIZE_T_MAX - sizeof(PyStringObject)) {
-               PyErr_SetString(PyExc_OverflowError,
-                       "string is too long for a Python string");
-               return NULL;
-@@ -972,14 +977,24 @@ string_concat(register PyStringObject *a
-               Py_INCREF(a);
-               return (PyObject *)a;
-       }
-+      /* Check that string sizes are not negative, to prevent an
-+         overflow in cases where we are passed incorrectly-created
-+         strings with negative lengths (due to a bug in other code).
-+      */
-       size = a->ob_size + b->ob_size;
--      if (size < 0) {
-+      if (a->ob_size < 0 || b->ob_size < 0 ||
-+          a->ob_size > PY_SSIZE_T_MAX - b->ob_size) {
-               PyErr_SetString(PyExc_OverflowError,
-                               "strings are too large to concat");
-               return NULL;
-       }
-
-       /* Inline PyObject_NewVar */
-+      if (size > PY_SSIZE_T_MAX - sizeof(PyStringObject)) {
-+              PyErr_SetString(PyExc_OverflowError,
-+                              "strings are too large to concat");
-+              return NULL;
-+      }
-       op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
-       if (op == NULL)
-               return PyErr_NoMemory();
-Index: Python-2.5.2/Misc/NEWS
-===================================================================
---- Python-2.5.2.orig/Misc/NEWS
-+++ Python-2.5.2/Misc/NEWS
-@@ -32,6 +32,8 @@ What's New in Python 2.5.2c1?
- Core and builtins
- -----------------
-
-+- Apply security patches from Apple.
-+
- - Issue #2620: Overflow checking when allocating or reallocating memory
-   was not always being done properly in some python types and extension
-   modules.  PyMem_MALLOC, PyMem_REALLOC, PyMem_NEW and PyMem_RESIZE have
-Index: Python-2.5.2/Lib/test/seq_tests.py
-===================================================================
---- Python-2.5.2.orig/Lib/test/seq_tests.py
-+++ Python-2.5.2/Lib/test/seq_tests.py
-@@ -307,11 +307,13 @@ class CommonTest(unittest.TestCase):
-             self.assertEqual(id(s), id(s*1))
-
-     def test_bigrepeat(self):
--        x = self.type2test([0])
--        x *= 2**16
--        self.assertRaises(MemoryError, x.__mul__, 2**16)
--        if hasattr(x, '__imul__'):
--            self.assertRaises(MemoryError, x.__imul__, 2**16)
-+        import sys
-+        if sys.maxint <= 2147483647:
-+            x = self.type2test([0])
-+            x *= 2**16
-+            self.assertRaises(MemoryError, x.__mul__, 2**16)
-+            if hasattr(x, '__imul__'):
-+                self.assertRaises(MemoryError, x.__imul__, 2**16)
-
-     def test_subscript(self):
-         a = self.type2test([10, 11])
-Index: Python-2.5.2/Lib/test/test_strop.py
-===================================================================
---- Python-2.5.2.orig/Lib/test/test_strop.py
-+++ Python-2.5.2/Lib/test/test_strop.py
-@@ -115,6 +115,25 @@ class StropFunctionTestCase(unittest.Tes
-         strop.uppercase
-         strop.whitespace
-
-+    @test_support.precisionbigmemtest(size=test_support._2G - 1, memuse=5)
-+    def test_stropjoin_huge_list(self, size):
-+        a = "A" * size
-+        try:
-+            r = strop.join([a, a], a)
-+        except OverflowError:
-+            pass
-+        else:
-+            self.assertEquals(len(r), len(a) * 3)
-+
-+    @test_support.precisionbigmemtest(size=test_support._2G - 1, memuse=1)
-+    def test_stropjoin_huge_tup(self, size):
-+        a = "A" * size
-+        try:
-+            r = strop.join((a, a), a)
-+        except OverflowError:
-+            pass # acceptable on 32-bit
-+        else:
-+            self.assertEquals(len(r), len(a) * 3)
-
- transtable = 
'\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037
 
!"#$%&\'()*+,-./0123456789:;<=>?...@abcdefghijklmnopqrstuvwxyz[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
-
-Index: Python-2.5.2/Lib/test/test_bigmem.py
-===================================================================
---- Python-2.5.2.orig/Lib/test/test_bigmem.py
-+++ Python-2.5.2/Lib/test/test_bigmem.py
-@@ -1,5 +1,5 @@
- from test import test_support
--from test.test_support import bigmemtest, _1G, _2G
-+from test.test_support import bigmemtest, _1G, _2G, _4G, precisionbigmemtest
-
- import unittest
- import operator
-@@ -54,6 +54,22 @@ class StrTest(unittest.TestCase):
-         self.assertEquals(s[lpadsize:-rpadsize], SUBSTR)
-         self.assertEquals(s.strip(), SUBSTR.strip())
-
-+    @precisionbigmemtest(size=_2G - 1, memuse=1)
-+    def test_center_unicode(self, size):
-+        SUBSTR = u' abc def ghi'
-+        try:
-+            s = SUBSTR.center(size)
-+        except OverflowError:
-+            pass # acceptable on 32-bit
-+        else:
-+            self.assertEquals(len(s), size)
-+            lpadsize = rpadsize = (len(s) - len(SUBSTR)) // 2
-+            if len(s) % 2:
-+                lpadsize += 1
-+            self.assertEquals(s[lpadsize:-rpadsize], SUBSTR)
-+            self.assertEquals(s.strip(), SUBSTR.strip())
-+            del s
-+
-     @bigmemtest(minsize=_2G, memuse=2)
-     def test_count(self, size):
-         SUBSTR = ' abc def ghi'
-@@ -70,10 +86,44 @@ class StrTest(unittest.TestCase):
-         s = '.' * size
-         self.assertEquals(len(s.decode('utf-8')), size)
-
-+    def basic_encode_test(self, size, enc, c=u'.', expectedsize=None):
-+        if expectedsize is None:
-+            expectedsize = size
-+
-+        s = c * size
-+        self.assertEquals(len(s.encode(enc)), expectedsize)
-+
-     @bigmemtest(minsize=_2G + 2, memuse=3)
-     def test_encode(self, size):
--        s = u'.' * size
--        self.assertEquals(len(s.encode('utf-8')), size)
-+        return self.basic_encode_test(size, 'utf-8')
-+
-+    @precisionbigmemtest(size=_4G / 6 + 2, memuse=2)
-+    def test_encode_raw_unicode_escape(self, size):
-+        try:
-+            return self.basic_encode_test(size, 'raw_unicode_escape')
-+        except MemoryError:
-+            pass # acceptable on 32-bit
-+
-+    @precisionbigmemtest(size=_4G / 5 + 70, memuse=3)
-+    def test_encode_utf7(self, size):
-+        try:
-+            return self.basic_encode_test(size, 'utf7')
-+        except MemoryError:
-+            pass # acceptable on 32-bit
-+
-+    @precisionbigmemtest(size=_2G-1, memuse=2)
-+    def test_decodeascii(self, size):
-+        return self.basic_encode_test(size, 'ascii', c='A')
-+
-+    @precisionbigmemtest(size=_4G / 5, memuse=6+2)
-+    def test_unicode_repr_oflw(self, size):
-+        try:
-+            s = u"\uAAAA"*size
-+            r = repr(s)
-+        except MemoryError:
-+            pass # acceptable on 32-bit
-+        else:
-+            self.failUnless(s == eval(r))
-
-     @bigmemtest(minsize=_2G, memuse=2)
-     def test_endswith(self, size):
-@@ -459,6 +509,11 @@ class StrTest(unittest.TestCase):
-         self.assertEquals(s.count('\\'), size)
-         self.assertEquals(s.count('0'), size * 2)
-
-+    @bigmemtest(minsize=2**32 / 5, memuse=6+2)
-+    def test_unicode_repr(self, size):
-+        s = u"\uAAAA" * size
-+        self.failUnless(len(repr(s)) > size)
-+
-     # This test is meaningful even with size < 2G, as long as the
-     # doubled string is > 2G (but it tests more if both are > 2G :)
-     @bigmemtest(minsize=_1G + 2, memuse=3)
-@@ -642,6 +697,35 @@ class TupleTest(unittest.TestCase):
-     def test_repeat_large(self, size):
-         return self.basic_test_repeat(size)
-
-+    @bigmemtest(minsize=_1G - 1, memuse=12)
-+    def test_repeat_large_2(self, size):
-+        return self.basic_test_repeat(size)
-+
-+    @precisionbigmemtest(size=_1G - 1, memuse=9)
-+    def test_from_2G_generator(self, size):
-+        try:
-+            t = tuple(xrange(size))
-+        except MemoryError:
-+            pass # acceptable on 32-bit
-+        else:
-+            count = 0
-+            for item in t:
-+                self.assertEquals(item, count)
-+                count += 1
-+            self.assertEquals(count, size)
-+
-+    @precisionbigmemtest(size=_1G - 25, memuse=9)
-+    def test_from_almost_2G_generator(self, size):
-+        try:
-+            t = tuple(xrange(size))
-+            count = 0
-+            for item in t:
-+                self.assertEquals(item, count)
-+                count += 1
-+            self.assertEquals(count, size)
-+        except MemoryError:
-+            pass # acceptable, expected on 32-bit
-+
-     # Like test_concat, split in two.
-     def basic_test_repr(self, size):
-         t = (0,) * size
-@@ -957,8 +1041,34 @@ class ListTest(unittest.TestCase):
-         self.assertEquals(l[:10], [1] * 10)
-         self.assertEquals(l[-10:], [5] * 10)
-
-+class BufferTest(unittest.TestCase):
-+
-+    @precisionbigmemtest(size=_1G, memuse=4)
-+    def test_repeat(self, size):
-+        try:
-+            b = buffer("AAAA")*size
-+        except MemoryError:
-+            pass # acceptable on 32-bit
-+        else:
-+            count = 0
-+            for c in b:
-+                self.assertEquals(c, 'A')
-+                count += 1
-+            self.assertEquals(count, size*4)
-+
- def test_main():
--    test_support.run_unittest(StrTest, TupleTest, ListTest)
-+    test_support.run_unittest(StrTest, TupleTest, ListTest, BufferTest)
-+
-+# Expected failures (crashers)
-+# del StrTest.test_center_unicode
-+del StrTest.test_decodeascii
-+# del StrTest.test_encode_utf32
-+# del StrTest.test_encode_utf7
-+# del StrTest.test_encode_raw_unicode_escape
-+#
-+# del TupleTest.test_from_2G_generator
-+#
-+# del BufferTest.test_repeat
-
- if __name__ == '__main__':
-     if len(sys.argv) > 1:
-Index: Python-2.5.2/Lib/test/test_support.py
-===================================================================
---- Python-2.5.2.orig/Lib/test/test_support.py
-+++ Python-2.5.2/Lib/test/test_support.py
-@@ -33,6 +33,7 @@ verbose = 1              # Flag set to 0
- use_resources = None     # Flag set to [] by regrtest.py
- max_memuse = 0           # Disable bigmem tests (they will still be run with
-                          # small sizes, to make sure they work.)
-+real_max_memuse = 0
-
- # _original_stdout is meant to hold stdout at the time regrtest began.
- # This may be "the real" stdout, or IDLE's emulation of stdout, or whatever.
-@@ -323,6 +324,7 @@ def run_with_locale(catstr, *locales):
- _1M = 1024*1024
- _1G = 1024 * _1M
- _2G = 2 * _1G
-+_4G = 4 * _1G
-
- # Hack to get at the maximum value an internal index can take.
- class _Dummy:
-@@ -333,6 +335,7 @@ MAX_Py_ssize_t = _Dummy()[:]
- def set_memlimit(limit):
-     import re
-     global max_memuse
-+    global real_max_memuse
-     sizes = {
-         'k': 1024,
-         'm': _1M,
-@@ -344,6 +347,7 @@ def set_memlimit(limit):
-     if m is None:
-         raise ValueError('Invalid memory limit %r' % (limit,))
-     memlimit = int(float(m.group(1)) * sizes[m.group(3).lower()])
-+    real_max_memuse = memlimit
-     if memlimit > MAX_Py_ssize_t:
-         memlimit = MAX_Py_ssize_t
-     if memlimit < _2G - 1:
-@@ -389,6 +393,27 @@ def bigmemtest(minsize, memuse, overhead
-         return wrapper
-     return decorator
-
-+def precisionbigmemtest(size, memuse, overhead=5*_1M):
-+    def decorator(f):
-+        def wrapper(self):
-+            if not real_max_memuse:
-+                maxsize = 5147
-+            else:
-+                maxsize = size
-+
-+                if real_max_memuse and real_max_memuse < maxsize * memuse:
-+                    if verbose:
-+                        sys.stderr.write("Skipping %s because of memory "
-+                                         "constraint\n" % (f.__name__,))
-+                    return
-+
-+            return f(self, maxsize)
-+        wrapper.size = size
-+        wrapper.memuse = memuse
-+        wrapper.overhead = overhead
-+        return wrapper
-+    return decorator
-+
- def bigaddrspacetest(f):
-     """Decorator for tests that fill the address space."""
-     def wrapper(self):
-Index: Python-2.5.2/Modules/mmapmodule.c
-===================================================================
---- Python-2.5.2.orig/Modules/mmapmodule.c
-+++ Python-2.5.2/Modules/mmapmodule.c
-@@ -223,7 +223,7 @@ mmap_read_method(mmap_object *self,
-               return(NULL);
-
-       /* silently 'adjust' out-of-range requests */
--      if ((self->pos + num_bytes) > self->size) {
-+      if (num_bytes > self->size - self->pos) {
-               num_bytes -= (self->pos+num_bytes) - self->size;
-       }
-       result = Py_BuildValue("s#", self->data+self->pos, num_bytes);
-Index: Python-2.5.2/Modules/stropmodule.c
-===================================================================
---- Python-2.5.2.orig/Modules/stropmodule.c
-+++ Python-2.5.2/Modules/stropmodule.c
-@@ -216,6 +216,13 @@ strop_joinfields(PyObject *self, PyObjec
-                               return NULL;
-                       }
-                       slen = PyString_GET_SIZE(item);
-+                      if (slen > PY_SSIZE_T_MAX - reslen ||
-+                          seplen > PY_SSIZE_T_MAX - reslen - seplen) {
-+                              PyErr_SetString(PyExc_OverflowError,
-+                                              "input too long");
-+                              Py_DECREF(res);
-+                              return NULL;
-+                      }
-                       while (reslen + slen + seplen >= sz) {
-                               if (_PyString_Resize(&res, sz * 2) < 0)
-                                       return NULL;
-@@ -253,6 +260,14 @@ strop_joinfields(PyObject *self, PyObjec
-                       return NULL;
-               }
-               slen = PyString_GET_SIZE(item);
-+              if (slen > PY_SSIZE_T_MAX - reslen ||
-+                  seplen > PY_SSIZE_T_MAX - reslen - seplen) {
-+                      PyErr_SetString(PyExc_OverflowError,
-+                                      "input too long");
-+                      Py_DECREF(res);
-+                      Py_XDECREF(item);
-+                      return NULL;
-+              }
-               while (reslen + slen + seplen >= sz) {
-                       if (_PyString_Resize(&res, sz * 2) < 0) {
-                               Py_DECREF(item);
-Index: Python-2.5.2/Modules/gcmodule.c
-===================================================================
---- Python-2.5.2.orig/Modules/gcmodule.c
-+++ Python-2.5.2/Modules/gcmodule.c
-@@ -1318,7 +1318,10 @@ PyObject *
- _PyObject_GC_Malloc(size_t basicsize)
- {
-       PyObject *op;
--      PyGC_Head *g = (PyGC_Head *)PyObject_MALLOC(
-+      PyGC_Head *g;
-+      if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
-+              return PyErr_NoMemory();
-+      g = (PyGC_Head *)PyObject_MALLOC(
-                 sizeof(PyGC_Head) + basicsize);
-       if (g == NULL)
-               return PyErr_NoMemory();
-@@ -1361,6 +1364,8 @@ _PyObject_GC_Resize(PyVarObject *op, Py_
- {
-       const size_t basicsize = _PyObject_VAR_SIZE(op->ob_type, nitems);
-       PyGC_Head *g = AS_GC(op);
-+      if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
-+              return (PyVarObject *)PyErr_NoMemory();
-       g = (PyGC_Head *)PyObject_REALLOC(g,  sizeof(PyGC_Head) + basicsize);
-       if (g == NULL)
-               return (PyVarObject *)PyErr_NoMemory();
diff --git a/source/devel/python/CVE-2008-2316.patch 
b/source/devel/python/CVE-2008-2316.patch
deleted file mode 100644
index 30b7364..0000000
--- a/source/devel/python/CVE-2008-2316.patch
+++ /dev/null
@@ -1,153 +0,0 @@
-Index: Python-2.5.2/Lib/test/test_hashlib.py
-===================================================================
---- Python-2.5.2.orig/Lib/test/test_hashlib.py
-+++ Python-2.5.2/Lib/test/test_hashlib.py
-@@ -9,7 +9,7 @@
- import hashlib
- import unittest
- from test import test_support
--
-+from test.test_support import _4G, precisionbigmemtest
-
- def hexstr(s):
-     import string
-@@ -55,7 +55,6 @@ class HashLibTestCase(unittest.TestCase)
-             m2.update(aas + bees + cees)
-             self.assertEqual(m1.digest(), m2.digest())
-
--
-     def check(self, name, data, digest):
-         # test the direct constructors
-         computed = getattr(hashlib, name)(data).hexdigest()
-@@ -74,7 +73,22 @@ class HashLibTestCase(unittest.TestCase)
-     def test_case_md5_2(self):
-         self.check('md5', 
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
-                    'd174ab98d277d9f5a5611c2c9f419d9f')
--
-+
-+    @precisionbigmemtest(size=_4G + 5, memuse=1)
-+    def test_case_md5_huge(self, size):
-+        if size == _4G + 5:
-+            try:
-+                self.check('md5', 'A'*size, 
'c9af2dff37468ce5dfee8f2cfc0a9c6d')
-+            except OverflowError:
-+                pass # 32-bit arch
-+
-+    @precisionbigmemtest(size=_4G - 1, memuse=1)
-+    def test_case_md5_uintmax(self, size):
-+        if size == _4G - 1:
-+            try:
-+                self.check('md5', 'A'*size, 
'28138d306ff1b8281f1a9067e1a1a2b3')
-+            except OverflowError:
-+                pass # 32-bit arch
-
-     # use the three examples from Federal Information Processing Standards
-     # Publication 180-1, Secure Hash Standard,  1995 April 17
-Index: Python-2.5.2/Modules/_hashopenssl.c
-===================================================================
---- Python-2.5.2.orig/Modules/_hashopenssl.c
-+++ Python-2.5.2/Modules/_hashopenssl.c
-@@ -19,6 +19,8 @@
- /* EVP is the preferred interface to hashing in OpenSSL */
- #include <openssl/evp.h>
-
-+#define MUNCH_SIZE INT_MAX
-+
-
- #ifndef HASH_OBJ_CONSTRUCTOR
- #define HASH_OBJ_CONSTRUCTOR 0
-@@ -164,9 +166,18 @@ EVP_update(EVPobject *self, PyObject *ar
-     if (!PyArg_ParseTuple(args, "s#:update", &cp, &len))
-         return NULL;
-
-+    if (len > 0 && len <= MUNCH_SIZE) {
-     EVP_DigestUpdate(&self->ctx, cp, Py_SAFE_DOWNCAST(len, Py_ssize_t,
-                                                       unsigned int));
--
-+    } else {
-+        Py_ssize_t offset = 0;
-+        while (len) {
-+            unsigned int process = len > MUNCH_SIZE ? MUNCH_SIZE : len;
-+            EVP_DigestUpdate(&self->ctx, cp + offset, process);
-+            len -= process;
-+            offset += process;
-+        }
-+    }
-     Py_INCREF(Py_None);
-     return Py_None;
- }
-@@ -255,10 +266,21 @@ EVP_tp_init(EVPobject *self, PyObject *a
-     self->name = name_obj;
-     Py_INCREF(self->name);
-
--    if (cp && len)
-+    if (cp && len) {
-+        if (len > 0 && len <= MUNCH_SIZE) {
-         EVP_DigestUpdate(&self->ctx, cp, Py_SAFE_DOWNCAST(len, Py_ssize_t,
-                                                           unsigned int));
--
-+        } else {
-+            Py_ssize_t offset = 0;
-+            while (len) {
-+                unsigned int process = len > MUNCH_SIZE ? MUNCH_SIZE : len;
-+                EVP_DigestUpdate(&self->ctx, cp + offset, process);
-+                len -= process;
-+                offset += process;
-+            }
-+        }
-+    }
-+
-     return 0;
- }
- #endif
-@@ -328,7 +350,7 @@ static PyTypeObject EVPtype = {
- static PyObject *
- EVPnew(PyObject *name_obj,
-        const EVP_MD *digest, const EVP_MD_CTX *initial_ctx,
--       const unsigned char *cp, unsigned int len)
-+       const unsigned char *cp, Py_ssize_t len)
- {
-     EVPobject *self;
-
-@@ -346,8 +368,20 @@ EVPnew(PyObject *name_obj,
-         EVP_DigestInit(&self->ctx, digest);
-     }
-
--    if (cp && len)
--        EVP_DigestUpdate(&self->ctx, cp, len);
-+    if (cp && len) {
-+        if (len > 0 && len <= MUNCH_SIZE) {
-+            EVP_DigestUpdate(&self->ctx, cp, Py_SAFE_DOWNCAST(len, Py_ssize_t,
-+                                                              unsigned int));
-+        } else {
-+            Py_ssize_t offset = 0;
-+            while (len) {
-+                unsigned int process = len > MUNCH_SIZE ? MUNCH_SIZE : len;
-+                EVP_DigestUpdate(&self->ctx, cp + offset, process);
-+                len -= process;
-+                offset += process;
-+            }
-+        }
-+    }
-
-     return (PyObject *)self;
- }
-@@ -384,8 +418,7 @@ EVP_new(PyObject *self, PyObject *args,
-
-     digest = EVP_get_digestbyname(name);
-
--    return EVPnew(name_obj, digest, NULL, cp, Py_SAFE_DOWNCAST(len, 
Py_ssize_t,
--                                                               unsigned int));
-+    return EVPnew(name_obj, digest, NULL, cp, len);
- }
-
- /*
-@@ -410,7 +443,7 @@ EVP_new(PyObject *self, PyObject *args,
-                 CONST_ ## NAME ## _name_obj, \
-                 NULL, \
-                 CONST_new_ ## NAME ## _ctx_p, \
--                cp, Py_SAFE_DOWNCAST(len, Py_ssize_t, unsigned int)); \
-+                cp, len); \
-     }
-
- /* a PyMethodDef structure for the constructor */
diff --git a/source/devel/python/CVE-2008-3142.patch 
b/source/devel/python/CVE-2008-3142.patch
deleted file mode 100644
index 531bef4..0000000
--- a/source/devel/python/CVE-2008-3142.patch
+++ /dev/null
@@ -1,194 +0,0 @@
-r65261 | neal.norwitz | 2008-07-28 07:06:20 +0200 (Mon, 28 Jul 2008) | 10 lines
-
-Backport code from r65182:
-
-Issue #2620: Overflow checking when allocating or reallocating memory
-was not always being done properly in some python types and extension
-modules.  PyMem_MALLOC, PyMem_REALLOC, PyMem_NEW and PyMem_RESIZE have
-all been updated to perform better checks and places in the code that
-would previously leak memory on the error path when such an allocation
-failed have been fixed.
-
-Index: Python-2.5.2/Include/pymem.h
-===================================================================
---- Python-2.5.2.orig/Include/pymem.h
-+++ Python-2.5.2/Include/pymem.h
-@@ -67,8 +67,12 @@ PyAPI_FUNC(void) PyMem_Free(void *);
-    for malloc(0), which would be treated as an error. Some platforms
-    would return a pointer with no memory behind it, which would break
-    pymalloc. To solve these problems, allocate an extra byte. */
--#define PyMem_MALLOC(n)         malloc((n) ? (n) : 1)
--#define PyMem_REALLOC(p, n)     realloc((p), (n) ? (n) : 1)
-+/* Returns NULL to indicate error if a negative size or size larger than
-+   Py_ssize_t can represent is supplied.  Helps prevents security holes. */
-+#define PyMem_MALLOC(n)               (((n) < 0 || (n) > PY_SSIZE_T_MAX) ? 
NULL \
-+                              : malloc((n) ? (n) : 1))
-+#define PyMem_REALLOC(p, n)   (((n) < 0 || (n) > PY_SSIZE_T_MAX) ? NULL \
-+                              : realloc((p), (n) ? (n) : 1))
- #define PyMem_FREE            free
-
- #endif        /* PYMALLOC_DEBUG */
-@@ -77,24 +81,31 @@ PyAPI_FUNC(void) PyMem_Free(void *);
-  * Type-oriented memory interface
-  * ==============================
-  *
-- * These are carried along for historical reasons.  There's rarely a good
-- * reason to use them anymore (you can just as easily do the multiply and
-- * cast yourself).
-+ * Allocate memory for n objects of the given type.  Returns a new pointer
-+ * or NULL if the request was too large or memory allocation failed.  Use
-+ * these macros rather than doing the multiplication yourself so that proper
-+ * overflow checking is always done.
-  */
-
- #define PyMem_New(type, n) \
--  ( assert((n) <= PY_SIZE_MAX / sizeof(type)) , \
-+  ( ((n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \
-       ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
- #define PyMem_NEW(type, n) \
--  ( assert((n) <= PY_SIZE_MAX / sizeof(type)) , \
-+  ( ((n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \
-       ( (type *) PyMem_MALLOC((n) * sizeof(type)) ) )
-
-+/*
-+ * The value of (p) is always clobbered by this macro regardless of success.
-+ * The caller MUST check if (p) is NULL afterwards and deal with the memory
-+ * error if so.  This means the original value of (p) MUST be saved for the
-+ * caller's memory error handler to not lose track of it.
-+ */
- #define PyMem_Resize(p, type, n) \
--  ( assert((n) <= PY_SIZE_MAX / sizeof(type)) , \
--      ( (p) = (type *) PyMem_Realloc((p), (n) * sizeof(type)) ) )
-+  ( (p) = ((n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \
-+      (type *) PyMem_Realloc((p), (n) * sizeof(type)) )
- #define PyMem_RESIZE(p, type, n) \
--  ( assert((n) <= PY_SIZE_MAX / sizeof(type)) , \
--      ( (p) = (type *) PyMem_REALLOC((p), (n) * sizeof(type)) ) )
-+  ( (p) = ((n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL : \
-+      (type *) PyMem_REALLOC((p), (n) * sizeof(type)) )
-
- /* PyMem{Del,DEL} are left over from ancient days, and shouldn't be used
-  * anymore.  They're just confusing aliases for PyMem_{Free,FREE} now.
-Index: Python-2.5.2/Objects/obmalloc.c
-===================================================================
---- Python-2.5.2.orig/Objects/obmalloc.c
-+++ Python-2.5.2/Objects/obmalloc.c
-@@ -727,6 +727,15 @@ PyObject_Malloc(size_t nbytes)
-       uint size;
-
-       /*
-+       * Limit ourselves to PY_SSIZE_T_MAX bytes to prevent security holes.
-+       * Most python internals blindly use a signed Py_ssize_t to track
-+       * things without checking for overflows or negatives.
-+       * As size_t is unsigned, checking for nbytes < 0 is not required.
-+       */
-+      if (nbytes > PY_SSIZE_T_MAX)
-+              return NULL;
-+
-+      /*
-        * This implicitly redirects malloc(0).
-        */
-       if ((nbytes - 1) < SMALL_REQUEST_THRESHOLD) {
-@@ -1130,6 +1139,15 @@ PyObject_Realloc(void *p, size_t nbytes)
-       if (p == NULL)
-               return PyObject_Malloc(nbytes);
-
-+      /*
-+       * Limit ourselves to PY_SSIZE_T_MAX bytes to prevent security holes.
-+       * Most python internals blindly use a signed Py_ssize_t to track
-+       * things without checking for overflows or negatives.
-+       * As size_t is unsigned, checking for nbytes < 0 is not required.
-+       */
-+      if (nbytes > PY_SSIZE_T_MAX)
-+              return NULL;
-+
-       pool = POOL_ADDR(p);
-       if (Py_ADDRESS_IN_RANGE(p, pool)) {
-               /* We're in charge of this block */
-Index: Python-2.5.2/Misc/NEWS
-===================================================================
---- Python-2.5.2.orig/Misc/NEWS
-+++ Python-2.5.2/Misc/NEWS
-@@ -32,6 +32,13 @@ What's New in Python 2.5.2c1?
- Core and builtins
- -----------------
-
-+- Issue #2620: Overflow checking when allocating or reallocating memory
-+  was not always being done properly in some python types and extension
-+  modules.  PyMem_MALLOC, PyMem_REALLOC, PyMem_NEW and PyMem_RESIZE have
-+  all been updated to perform better checks and places in the code that
-+  would previously leak memory on the error path when such an allocation
-+  failed have been fixed.
-+
- - Added checks for integer overflows, contributed by Google. Some are
-   only available if asserts are left in the code, in cases where they
-   can't be triggered from Python code.
-Index: Python-2.5.2/Modules/almodule.c
-===================================================================
---- Python-2.5.2.orig/Modules/almodule.c
-+++ Python-2.5.2/Modules/almodule.c
-@@ -1633,9 +1633,11 @@ al_QueryValues(PyObject *self, PyObject
-       if (nvals < 0)
-               goto cleanup;
-       if (nvals > setsize) {
-+              ALvalue *old_return_set = return_set;
-               setsize = nvals;
-               PyMem_RESIZE(return_set, ALvalue, setsize);
-               if (return_set == NULL) {
-+                      return_set = old_return_set;
-                       PyErr_NoMemory();
-                       goto cleanup;
-               }
-Index: Python-2.5.2/Modules/arraymodule.c
-===================================================================
---- Python-2.5.2.orig/Modules/arraymodule.c
-+++ Python-2.5.2/Modules/arraymodule.c
-@@ -816,6 +816,7 @@ static int
- array_do_extend(arrayobject *self, PyObject *bb)
- {
-       Py_ssize_t size;
-+      char *old_item;
-
-       if (!array_Check(bb))
-               return array_iter_extend(self, bb);
-@@ -831,10 +832,11 @@ array_do_extend(arrayobject *self, PyObj
-                       return -1;
-       }
-       size = self->ob_size + b->ob_size;
-+      old_item = self->ob_item;
-         PyMem_RESIZE(self->ob_item, char, size*self->ob_descr->itemsize);
-         if (self->ob_item == NULL) {
--                PyObject_Del(self);
--                PyErr_NoMemory();
-+              self->ob_item = old_item;
-+              PyErr_NoMemory();
-               return -1;
-         }
-       memcpy(self->ob_item + self->ob_size*self->ob_descr->itemsize,
-@@ -886,7 +888,7 @@ array_inplace_repeat(arrayobject *self,
-                       if (size > PY_SSIZE_T_MAX / n) {
-                               return PyErr_NoMemory();
-                       }
--                      PyMem_Resize(items, char, n * size);
-+                      PyMem_RESIZE(items, char, n * size);
-                       if (items == NULL)
-                               return PyErr_NoMemory();
-                       p = items;
-Index: Python-2.5.2/Modules/selectmodule.c
-===================================================================
---- Python-2.5.2.orig/Modules/selectmodule.c
-+++ Python-2.5.2/Modules/selectmodule.c
-@@ -349,10 +349,12 @@ update_ufd_array(pollObject *self)
- {
-       Py_ssize_t i, pos;
-       PyObject *key, *value;
-+        struct pollfd *old_ufds = self->ufds;
-
-       self->ufd_len = PyDict_Size(self->dict);
--      PyMem_Resize(self->ufds, struct pollfd, self->ufd_len);
-+      PyMem_RESIZE(self->ufds, struct pollfd, self->ufd_len);
-       if (self->ufds == NULL) {
-+                self->ufds = old_ufds;
-               PyErr_NoMemory();
-               return 0;
-       }
diff --git a/source/devel/python/CVE-2008-3144.patch 
b/source/devel/python/CVE-2008-3144.patch
deleted file mode 100644
index fc30585..0000000
--- a/source/devel/python/CVE-2008-3144.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-r63883 | gregory.p.smith | 2008-06-02 02:07:25 +0200 (Mon, 02 Jun 2008) | 5 
lines
-
-- Issue #2588, #2589: Fix potential integer underflow and overflow
-  conditions in the PyOS_vsnprintf C API function.
-
-This is a backport of r63728 and r63734 from trunk.
-
-Index: Python-2.5.2/Python/mysnprintf.c
-===================================================================
---- Python-2.5.2.orig/Python/mysnprintf.c
-+++ Python-2.5.2/Python/mysnprintf.c
-@@ -54,18 +54,28 @@ int
- PyOS_vsnprintf(char *str, size_t size, const char  *format, va_list va)
- {
-       int len;  /* # bytes written, excluding \0 */
--#ifndef HAVE_SNPRINTF
-+#ifdef HAVE_SNPRINTF
-+#define _PyOS_vsnprintf_EXTRA_SPACE 1
-+#else
-+#define _PyOS_vsnprintf_EXTRA_SPACE 512
-       char *buffer;
- #endif
-       assert(str != NULL);
-       assert(size > 0);
-       assert(format != NULL);
-+      /* We take a size_t as input but return an int.  Sanity check
-+       * our input so that it won't cause an overflow in the
-+         * vsnprintf return value or the buffer malloc size.  */
-+      if (size > INT_MAX - _PyOS_vsnprintf_EXTRA_SPACE) {
-+              len = -666;
-+              goto Done;
-+      }
-
- #ifdef HAVE_SNPRINTF
-       len = vsnprintf(str, size, format, va);
- #else
-       /* Emulate it. */
--      buffer = PyMem_MALLOC(size + 512);
-+      buffer = PyMem_MALLOC(size + _PyOS_vsnprintf_EXTRA_SPACE);
-       if (buffer == NULL) {
-               len = -666;
-               goto Done;
-@@ -75,7 +85,7 @@ PyOS_vsnprintf(char *str, size_t size, c
-       if (len < 0)
-               /* ignore the error */;
-
--      else if ((size_t)len >= size + 512)
-+      else if ((size_t)len >= size + _PyOS_vsnprintf_EXTRA_SPACE)
-               Py_FatalError("Buffer overflow in 
PyOS_snprintf/PyOS_vsnprintf");
-
-       else {
-@@ -86,8 +96,10 @@ PyOS_vsnprintf(char *str, size_t size, c
-               str[to_copy] = '\0';
-       }
-       PyMem_FREE(buffer);
--Done:
- #endif
--      str[size-1] = '\0';
-+Done:
-+      if (size > 0)
-+              str[size-1] = '\0';
-       return len;
-+#undef _PyOS_vsnprintf_EXTRA_SPACE
- }
-Index: Python-2.5.2/Misc/NEWS
-===================================================================
---- Python-2.5.2.orig/Misc/NEWS
-+++ Python-2.5.2/Misc/NEWS
-@@ -109,6 +109,9 @@ Core and builtins
-   threading.enumerate() list after the join() for a brief period until
-   it actually exited.
-
-+- Issue #2588, #2589: Fix potential integer underflow and overflow
-+  conditions in the PyOS_vsnprintf C API function.
-+
-
- Library
- -------
diff --git a/source/devel/python/FrugalBuild b/source/devel/python/FrugalBuild
index 2135209..63a5852 100644
--- a/source/devel/python/FrugalBuild
+++ b/source/devel/python/FrugalBuild
@@ -4,9 +4,9 @@
USE_GUI=${USE_GUI:-"y"}

pkgname=python
-pkgver=2.5.2
-shortpkgver=2.5 # 2.3 if $pkgver=2.3.4
-pkgrel=7
+pkgver=2.6.1
+shortpkgver=2.6 # 2.3 if $pkgver=2.3.4
+pkgrel=1
pkgdesc="A high-level scripting language"
url="http://www.python.org";
depends=('glibc>=2.8-3' 'db>=4.7.25-2' 'bzip2>=1.0.5-2' 'gdbm>=1.8.3-5' 
'openssl>=0.9.8-14' 'glib2>=2.16.4-2' 'sqlite3')
@@ -14,17 +14,11 @@ Fuse $USE_GUI && makedepends=('tk>=8.5' 'gtk+2')
groups=('devel' 'devel-core')
archs=('i686' 'x86_64' 'ppc')
options=('scriptlet')
-up2date="lynx -dump $url/download/|grep current|sed 's/.*n \(.*\)\. .*/\1/;q'"
-source=(http://www.python.org/ftp/python/$pkgver/Python-$pkgver.tar.bz2 \
-       Python-2.4.1-gdbm-1.patch \
-       insecure_pathnames.diff \
-       
http://bugs.python.org/file8452/python-2.5.CVE-2007-4965-int-overflow.patch \
-       CVE-2008-1679.patch \
-       CVE-2008-3144.patch \
-       CVE-2008-3142.patch \
-       CVE-2008-2316.patch \
-       CVE-2008-2315.patch)
-signatures=($source.asc '' '' '' '' '' '' '' '')
+_F_archive_name="Python"
+_F_archive_ext=".tgz"
+up2date="lynx -dump $url/download/|grep 2.6|Flasttar"
+source=(http://www.python.org/ftp/python/$pkgver/Python-$pkgver.tar.bz2)
+sha1sums=('419f0cb29e9713ea861dde8c43d107c51329e57b')

subpkgs=("$pkgname-tools")
subdescs=("Optional development tools to extending Python")
diff --git a/source/devel/python/Python-2.4.1-gdbm-1.patch 
b/source/devel/python/Python-2.4.1-gdbm-1.patch
deleted file mode 100644
index 0ef613f..0000000
--- a/source/devel/python/Python-2.4.1-gdbm-1.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
-Date: 2003-12-26
-Initial Package Version: 2.3.3
-Origin: Greg Schafer and Jim Gifford
-Description: Fixes Python build issue with gdbm
-
-       *** WARNING: renaming "dbm" since importing it failed:
-       build/lib.linux-i686-2.3/dbm.so: undefined symbol: dbm_firstkey
-
-
-
-$LastChangedBy: bdubbs $
-$Date: 2005-08-01 13:29:19 -0600 (Mon, 01 Aug 2005) $
-
-diff -Naur Python-2.3.2.orig/setup.py Python-2.3.2/setup.py
---- Python-2.3.2.orig/setup.py 2003-09-22 01:19:45.000000000 +0000
-+++ Python-2.3.2/setup.py      2003-10-13 06:28:34.000000000 +0000
-@@ -596,12 +596,12 @@
-                 if self.compiler.find_library_file(lib_dirs, 'ndbm'):
-                     ndbm_libs = ['ndbm']
-                 else:
--                    ndbm_libs = []
-+                    ndbm_libs = ['gdbm', 'gdbm_compat']
-                 exts.append( Extension('dbm', ['dbmmodule.c'],
-                                        define_macros=[('HAVE_NDBM_H',None)],
-                                        libraries = ndbm_libs ) )
-             elif (self.compiler.find_library_file(lib_dirs, 'gdbm')
--                  and find_file("gdbm/ndbm.h", inc_dirs, []) is not None):
-+                  and find_file("ndbm.h", inc_dirs, []) is not None):
-                 exts.append( Extension('dbm', ['dbmmodule.c'],
-                                        
define_macros=[('HAVE_GDBM_NDBM_H',None)],
-                                        libraries = ['gdbm'] ) )
diff --git a/source/devel/python/insecure_pathnames.diff 
b/source/devel/python/insecure_pathnames.diff
deleted file mode 100644
index 8af2c3a..0000000
--- a/source/devel/python/insecure_pathnames.diff
+++ /dev/null
@@ -1,69 +0,0 @@
-From: http://bugs.python.org/file8339/insecure_pathnames.diff
-
-Index: Lib/tarfile.py
-===================================================================
---- a/Lib/tarfile.py   (revision 57571)
-+++ b/Lib/tarfile.py   (working copy)
-@@ -340,6 +340,9 @@
- class ExtractError(TarError):
-     """General exception for extract errors."""
-     pass
-+class SecurityError(ExtractError):
-+    """Exception for insecure pathnames."""
-+    pass
- class ReadError(TarError):
-     """Exception for unreadble tar archives."""
-     pass
-@@ -2006,12 +2009,13 @@
-
-         self.members.append(tarinfo)
-
--    def extractall(self, path=".", members=None):
-+    def extractall(self, path=".", members=None, check_paths=True):
-         """Extract all members from the archive to the current working
-            directory and set owner, modification time and permissions on
-            directories afterwards. `path' specifies a different directory
-            to extract to. `members' is optional and must be a subset of the
--           list returned by getmembers().
-+           list returned by getmembers(). If `check_paths' is True insecure
-+           pathnames are not extracted.
-         """
-         directories = []
-
-@@ -2019,6 +2023,20 @@
-             members = self
-
-         for tarinfo in members:
-+            if check_paths:
-+                try:
-+                    self._check_path(tarinfo.name)
-+                    if tarinfo.islnk():
-+                        self._check_path(tarinfo.linkname)
-+                    if tarinfo.issym():
-+                        self._check_path(os.path.join(tarinfo.name, 
tarinfo.linkname))
-+                except SecurityError, e:
-+                    if self.errorlevel > 1:
-+                        raise
-+                    else:
-+                        self._dbg(1, "tarfile: %s" % e)
-+                        continue
-+
-             if tarinfo.isdir():
-                 # Extract directory with a safe mode, so that
-                 # all files below can be extracted as well.
-@@ -2329,6 +2347,15 @@
-     
#--------------------------------------------------------------------------
-     # Little helper methods:
-
-+    def _check_path(self, path):
-+        """Raise an SecurityError if `path' is an insecure pathname.
-+        """
-+        path = normpath(path)
-+        if path.startswith("/"):
-+            raise SecurityError("found insecure absolute path %r" % path)
-+        if path.startswith("../"):
-+            raise SecurityError("found insecure relative path %r" % path)
-+
-     def _getmember(self, name, tarinfo=None):
-         """Find an archive member by name from bottom to top.
-            If tarinfo is given, it is used as the starting point.
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to