diff -Nru python3-stdlib-extensions-3.4.0/3.4/Modules/_tkinter.c python3-stdlib-extensions-3.4.3/3.4/Modules/_tkinter.c --- python3-stdlib-extensions-3.4.0/3.4/Modules/_tkinter.c 2014-03-23 07:53:55.000000000 +0000 +++ python3-stdlib-extensions-3.4.3/3.4/Modules/_tkinter.c 2015-02-25 11:27:45.000000000 +0000 @@ -339,8 +339,10 @@ const char *e = s + size; PyErr_Clear(); q = buf = (char *)PyMem_Malloc(size); - if (buf == NULL) + if (buf == NULL) { + PyErr_NoMemory(); return NULL; + } while (s != e) { if (s + 1 != e && s[0] == '\xc0' && s[1] == '\x80') { *q++ = '\0'; @@ -596,7 +598,7 @@ Tcl_SetVar(v->interp, "tcl_interactive", "0", TCL_GLOBAL_ONLY); /* This is used to get the application class for Tk 4.1 and up */ - argv0 = (char*)ckalloc(strlen(className) + 1); + argv0 = (char*)attemptckalloc(strlen(className) + 1); if (!argv0) { PyErr_NoMemory(); Py_DECREF(v); @@ -630,7 +632,7 @@ if (use) len += strlen(use) + sizeof "-use "; - args = (char*)ckalloc(len); + args = (char*)attemptckalloc(len); if (!args) { PyErr_NoMemory(); Py_DECREF(v); @@ -861,6 +863,16 @@ }; +#if PY_SIZE_MAX > INT_MAX +#define CHECK_STRING_LENGTH(s) do { \ + if (s != NULL && strlen(s) >= INT_MAX) { \ + PyErr_SetString(PyExc_OverflowError, "string is too long"); \ + return NULL; \ + } } while(0) +#else +#define CHECK_STRING_LENGTH(s) +#endif + static Tcl_Obj* AsObj(PyObject *value) { @@ -869,8 +881,8 @@ int overflow; if (PyBytes_Check(value)) - return Tcl_NewStringObj(PyBytes_AS_STRING(value), - PyBytes_GET_SIZE(value)); + return Tcl_NewByteArrayObj((unsigned char *)PyBytes_AS_STRING(value), + PyBytes_GET_SIZE(value)); else if (PyBool_Check(value)) return Tcl_NewBooleanObj(PyObject_IsTrue(value)); else if (PyLong_CheckExact(value) && @@ -887,11 +899,13 @@ Py_ssize_t size, i; size = PyTuple_Size(value); + if (size == 0) + return Tcl_NewListObj(0, NULL); if (!CHECK_SIZE(size, sizeof(Tcl_Obj *))) { PyErr_SetString(PyExc_OverflowError, "tuple is too long"); return NULL; } - argv = (Tcl_Obj **) ckalloc(((size_t)size) * sizeof(Tcl_Obj *)); + argv = (Tcl_Obj **) attemptckalloc(((size_t)size) * sizeof(Tcl_Obj *)); if(!argv) return 0; for (i = 0; i < size; i++) @@ -913,6 +927,8 @@ inbuf = PyUnicode_DATA(value); size = PyUnicode_GET_LENGTH(value); + if (size == 0) + return Tcl_NewUnicodeObj((const void *)"", 0); if (!CHECK_SIZE(size, sizeof(Tcl_UniChar))) { PyErr_SetString(PyExc_OverflowError, "string is too long"); return NULL; @@ -921,7 +937,7 @@ if (kind == sizeof(Tcl_UniChar)) return Tcl_NewUnicodeObj(inbuf, size); allocsize = ((size_t)size) * sizeof(Tcl_UniChar); - outbuf = (Tcl_UniChar*)ckalloc(allocsize); + outbuf = (Tcl_UniChar*)attemptckalloc(allocsize); /* Else overflow occurred, and we take the next exit */ if (!outbuf) { PyErr_NoMemory(); @@ -1086,7 +1102,7 @@ PyErr_SetString(PyExc_OverflowError, "tuple is too long"); return NULL; } - objv = (Tcl_Obj **)ckalloc(((size_t)objc) * sizeof(Tcl_Obj *)); + objv = (Tcl_Obj **)attemptckalloc(((size_t)objc) * sizeof(Tcl_Obj *)); if (objv == NULL) { PyErr_NoMemory(); objc = 0; @@ -1222,7 +1238,11 @@ PyObject *exc_type, *exc_value, *exc_tb; if (!WaitForMainloop(self)) return NULL; - ev = (Tkapp_CallEvent*)ckalloc(sizeof(Tkapp_CallEvent)); + ev = (Tkapp_CallEvent*)attemptckalloc(sizeof(Tkapp_CallEvent)); + if (ev == NULL) { + PyErr_NoMemory(); + return NULL; + } ev->ev.proc = (Tcl_EventProc*)Tkapp_CallProc; ev->self = self; ev->args = args; @@ -1279,6 +1299,7 @@ if (!PyArg_ParseTuple(args, "s:eval", &script)) return NULL; + CHECK_STRING_LENGTH(script); CHECK_TCL_APPARTMENT; ENTER_TCL @@ -1302,6 +1323,7 @@ if (!PyArg_ParseTuple(args, "s:evalfile", &fileName)) return NULL; + CHECK_STRING_LENGTH(fileName); CHECK_TCL_APPARTMENT; ENTER_TCL @@ -1322,9 +1344,10 @@ PyObject *res = NULL; int err; - if (!PyArg_ParseTuple(args, "s", &script)) + if (!PyArg_ParseTuple(args, "s:record", &script)) return NULL; + CHECK_STRING_LENGTH(script); CHECK_TCL_APPARTMENT; ENTER_TCL @@ -1345,6 +1368,7 @@ if (!PyArg_ParseTuple(args, "s:adderrorinfo", &msg)) return NULL; + CHECK_STRING_LENGTH(msg); CHECK_TCL_APPARTMENT; ENTER_TCL @@ -1469,8 +1493,11 @@ if (!WaitForMainloop(self)) return NULL; - ev = (VarEvent*)ckalloc(sizeof(VarEvent)); - + ev = (VarEvent*)attemptckalloc(sizeof(VarEvent)); + if (ev == NULL) { + PyErr_NoMemory(); + return NULL; + } ev->self = selfptr; ev->args = args; ev->flags = flags; @@ -1528,6 +1555,8 @@ if (!PyArg_ParseTuple(args, "ssO:setvar", &name1, &name2, &newValue)) return NULL; + CHECK_STRING_LENGTH(name1); + CHECK_STRING_LENGTH(name2); /* XXX must hold tcl lock already??? */ newval = AsObj(newValue); ENTER_TCL @@ -1573,6 +1602,7 @@ varname_converter, &name1, &name2)) return NULL; + CHECK_STRING_LENGTH(name2); ENTER_TCL tres = Tcl_GetVar2Ex(Tkapp_Interp(self), name1, name2, flags); ENTER_OVERLAP @@ -1615,6 +1645,8 @@ if (!PyArg_ParseTuple(args, "s|s:unsetvar", &name1, &name2)) return NULL; + CHECK_STRING_LENGTH(name1); + CHECK_STRING_LENGTH(name2); ENTER_TCL code = Tcl_UnsetVar2(Tkapp_Interp(self), name1, name2, flags); ENTER_OVERLAP @@ -1660,6 +1692,7 @@ } if (!PyArg_ParseTuple(args, "s:getint", &s)) return NULL; + CHECK_STRING_LENGTH(s); if (Tcl_GetInt(Tkapp_Interp(self), s, &v) == TCL_ERROR) return Tkinter_Error(self); return Py_BuildValue("i", v); @@ -1680,6 +1713,7 @@ } if (!PyArg_ParseTuple(args, "s:getdouble", &s)) return NULL; + CHECK_STRING_LENGTH(s); if (Tcl_GetDouble(Tkapp_Interp(self), s, &v) == TCL_ERROR) return Tkinter_Error(self); return Py_BuildValue("d", v); @@ -1700,6 +1734,7 @@ } if (!PyArg_ParseTuple(args, "s:getboolean", &s)) return NULL; + CHECK_STRING_LENGTH(s); if (Tcl_GetBoolean(Tkapp_Interp(self), s, &v) == TCL_ERROR) return Tkinter_Error(self); return PyBool_FromLong(v); @@ -1715,6 +1750,7 @@ if (!PyArg_ParseTuple(args, "s:exprstring", &s)) return NULL; + CHECK_STRING_LENGTH(s); CHECK_TCL_APPARTMENT; ENTER_TCL @@ -1739,6 +1775,7 @@ if (!PyArg_ParseTuple(args, "s:exprlong", &s)) return NULL; + CHECK_STRING_LENGTH(s); CHECK_TCL_APPARTMENT; ENTER_TCL @@ -1762,6 +1799,7 @@ if (!PyArg_ParseTuple(args, "s:exprdouble", &s)) return NULL; + CHECK_STRING_LENGTH(s); CHECK_TCL_APPARTMENT; PyFPE_START_PROTECT("Tkapp_ExprDouble", return 0) ENTER_TCL @@ -1786,6 +1824,7 @@ if (!PyArg_ParseTuple(args, "s:exprboolean", &s)) return NULL; + CHECK_STRING_LENGTH(s); CHECK_TCL_APPARTMENT; ENTER_TCL retval = Tcl_ExprBoolean(Tkapp_Interp(self), s, &v); @@ -1838,6 +1877,7 @@ if (!PyArg_ParseTuple(args, "et:splitlist", "utf-8", &list)) return NULL; + CHECK_STRING_LENGTH(list); if (Tcl_SplitList(Tkapp_Interp(self), list, &argc, &argv) == TCL_ERROR) { PyMem_Free(list); @@ -1899,6 +1939,7 @@ if (!PyArg_ParseTuple(args, "et:split", "utf-8", &list)) return NULL; + CHECK_STRING_LENGTH(list); v = Split(list); PyMem_Free(list); return v; @@ -2030,6 +2071,7 @@ if (!PyArg_ParseTuple(args, "sO:createcommand", &cmdName, &func)) return NULL; + CHECK_STRING_LENGTH(cmdName); if (!PyCallable_Check(func)) { PyErr_SetString(PyExc_TypeError, "command not callable"); return NULL; @@ -2051,7 +2093,12 @@ #ifdef WITH_THREAD if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) { Tcl_Condition cond = NULL; - CommandEvent *ev = (CommandEvent*)ckalloc(sizeof(CommandEvent)); + CommandEvent *ev = (CommandEvent*)attemptckalloc(sizeof(CommandEvent)); + if (ev == NULL) { + PyErr_NoMemory(); + PyMem_DEL(data); + return NULL; + } ev->ev.proc = (Tcl_EventProc*)Tkapp_CommandProc; ev->interp = self->interp; ev->create = 1; @@ -2091,12 +2138,17 @@ if (!PyArg_ParseTuple(args, "s:deletecommand", &cmdName)) return NULL; + CHECK_STRING_LENGTH(cmdName); #ifdef WITH_THREAD if (self->threaded && self->thread_id != Tcl_GetCurrentThread()) { Tcl_Condition cond = NULL; CommandEvent *ev; - ev = (CommandEvent*)ckalloc(sizeof(CommandEvent)); + ev = (CommandEvent*)attemptckalloc(sizeof(CommandEvent)); + if (ev == NULL) { + PyErr_NoMemory(); + return NULL; + } ev->ev.proc = (Tcl_EventProc*)Tkapp_CommandProc; ev->interp = self->interp; ev->create = 0; @@ -2782,6 +2834,10 @@ &interactive, &wantobjects, &wantTk, &sync, &use)) return NULL; + CHECK_STRING_LENGTH(screenName); + CHECK_STRING_LENGTH(baseName); + CHECK_STRING_LENGTH(className); + CHECK_STRING_LENGTH(use); return (PyObject *) Tkapp_New(screenName, className, interactive, wantobjects, wantTk, diff -Nru python3-stdlib-extensions-3.4.0/debian/changelog python3-stdlib-extensions-3.4.3/debian/changelog --- python3-stdlib-extensions-3.4.0/debian/changelog 2014-03-23 07:57:59.000000000 +0000 +++ python3-stdlib-extensions-3.4.3/debian/changelog 2015-06-17 12:24:12.000000000 +0000 @@ -1,9 +1,45 @@ -python3-stdlib-extensions (3.4.0-0ubuntu1) trusty; urgency=medium +python3-stdlib-extensions (3.4.3-1~14.04.2) trusty-proposed; urgency=medium - * Bump version to 3.4.0. - * Stop building for 3.3. + * SRU, update python3.4 for trusty. LP: #1348954. - -- Matthias Klose Sun, 23 Mar 2014 08:57:18 +0100 + -- Matthias Klose Wed, 17 Jun 2015 14:23:30 +0200 + +python3-stdlib-extensions (3.4.3-1) unstable; urgency=medium + + * Bump version to 3.4.3. + + -- Matthias Klose Thu, 26 Feb 2015 11:15:44 +0100 + +python3-stdlib-extensions (3.4.2-1) unstable; urgency=medium + + * Bump version to 3.4.2 release. + + -- Matthias Klose Wed, 08 Oct 2014 12:40:11 +0200 + +python3-stdlib-extensions (3.4.2~rc1-1) unstable; urgency=medium + + * Bump version to 3.4.2 release candidate 1. + + -- Matthias Klose Wed, 01 Oct 2014 04:09:23 +0200 + +python3-stdlib-extensions (3.4.1-3) unstable; urgency=medium + + * Build for blt 2.5. Closes: #753929. + + -- Matthias Klose Tue, 08 Jul 2014 11:19:53 +0200 + +python3-stdlib-extensions (3.4.1-2) unstable; urgency=medium + + * Require BLT version built for Tcl/Tk 8.6. + + -- Matthias Klose Fri, 13 Jun 2014 13:51:07 +0200 + +python3-stdlib-extensions (3.4.1-1) unstable; urgency=medium + + * Bump version to 3.4.1. + * Remove python 3.3 sources. + + -- Matthias Klose Wed, 04 Jun 2014 09:59:40 +0200 python3-stdlib-extensions (3.3.4-1) unstable; urgency=medium diff -Nru python3-stdlib-extensions-3.4.0/debian/control python3-stdlib-extensions-3.4.3/debian/control --- python3-stdlib-extensions-3.4.0/debian/control 2014-02-12 10:31:57.000000000 +0000 +++ python3-stdlib-extensions-3.4.3/debian/control 2015-05-04 19:58:21.000000000 +0000 @@ -7,13 +7,13 @@ python3-all-dev:any, python3-all-dbg:any, libpython3.4-dev, libpython3.4-dbg, python3.4-dev:any, python3.4-dbg:any, - tk-dev, blt-dev (>= 2.4z), libgdbm-dev -Build-Conflicts: tcl8.0-dev, tk8.0-dev, tcl8.2-dev, tk8.2-dev, tcl8.3-dev, tk8.3-dev, tk8.4-dev -Standards-Version: 3.9.5 + tk-dev, blt-dev (>= 2.4z-7), libgdbm-dev +Build-Conflicts: tcl8.4-dev, tk8.4-dev, tcl8.5-dev, tk8.5-dev +Standards-Version: 3.9.6 Package: python3-tk Architecture: any -Depends: ${python3:Depends}, ${shlibs:Depends}, ${misc:Depends} +Depends: ${python3:Depends}, blt (>= 2.4z-7), ${shlibs:Depends}, ${misc:Depends} Provides: ${python3:Provides} Suggests: tix, python3-tk-dbg Description: Tkinter - Writing Tk applications with Python 3.x @@ -35,7 +35,7 @@ Architecture: any Priority: extra Section: debug -Depends: ${python3:Depends}, python3-tk (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Depends: ${python3:Depends}, python3-tk (= ${binary:Version}), blt (>= 2.4z-7), ${shlibs:Depends}, ${misc:Depends} Description: Tkinter - Writing Tk applications with Python 3.x (debug extension) A module for writing portable GUI applications with Python using Tk. Also known as Tkinter. diff -Nru python3-stdlib-extensions-3.4.0/debian/rules python3-stdlib-extensions-3.4.3/debian/rules --- python3-stdlib-extensions-3.4.0/debian/rules 2014-03-23 08:02:22.000000000 +0000 +++ python3-stdlib-extensions-3.4.3/debian/rules 2014-10-08 10:47:53.000000000 +0000 @@ -38,22 +38,22 @@ build-stamp-py%: dh_testdir - ln -sf /usr/lib/libBLT.2.4.so.8.5 $*/libBLT85.so - ln -sf /usr/lib/libBLT.2.4.so.8.5 $*/libBLT85.so.8.5 + ln -sf /usr/lib/libBLT.2.4.so.8.6 $*/libBLT86.so + ln -sf /usr/lib/libBLT.2.4.so.8.6 $*/libBLT86.so.8.6 cd $* && $(SET_CROSS_ENV) python$* setup.py build touch $@ dbg-stamp-py%: dh_testdir - ln -sf /usr/lib/libBLT.2.4.so.8.5 $*/libBLT85.so - ln -sf /usr/lib/libBLT.2.4.so.8.5 $*/libBLT85.so.8.5 + ln -sf /usr/lib/libBLT.2.4.so.8.6 $*/libBLT85.so + ln -sf /usr/lib/libBLT.2.4.so.8.6 $*/libBLT85.so.8.6 cd $* && $(SET_CROSS_ENV) python$*-dbg setup.py build touch $@ clean: dh_testdir dh_testroot - rm -f *stamp-* + rm -f *stamp* rm -rf 3.?/build rm -rf 3.?/libBLT* dh_clean @@ -126,14 +126,14 @@ dh_strip -p$(p_tk) --dbg-package=$(p_tk)-dbg ifeq (0,1) ( \ - echo 'python3:Depends=python3 (>= 3.3), python3 (<< 3.5)'; \ - echo 'python3:Versions=3.3, 3.4'; \ - echo 'python3:Provides=python3.3-gdbm, python3.4-gdbm'; \ + echo 'python3:Depends=python3 (>= 3.4), python3 (<< 3.6)'; \ + echo 'python3:Versions=3.4, 3.5'; \ + echo 'python3:Provides=python3.4-gdbm, python3.5-gdbm'; \ ) >> debian/python3-gdbm.substvars ( \ - echo 'python3:Depends=python3 (>= 3.3), python3 (<< 3.5)'; \ - echo 'python3:Versions=3.3, 3.4'; \ - echo 'python3:Provides=python3.3-tk, python3.4-tk'; \ + echo 'python3:Depends=python3 (>= 3.4), python3 (<< 3.6)'; \ + echo 'python3:Versions=3.4, 3.5'; \ + echo 'python3:Provides=python3.4-tk, python3.5-tk'; \ ) >> debian/python3-tk.substvars else ( \