diff -r a7b498c16f9e Python/getargs.c --- a/Python/getargs.c Sun Dec 16 17:25:05 2012 +0000 +++ b/Python/getargs.c Wed Dec 19 22:36:53 2012 +0000 @@ -572,6 +572,15 @@ char c = *format++; char *sarg; + if (PyWeakref_CheckProxy(arg)) { + arg = PyWeakref_GET_OBJECT(arg); + if (arg == Py_None) { + PyErr_SetString(PyExc_ReferenceError, + "weakly-referenced object no longer exists"); + return NULL; + } + } + switch (c) { case 'b': { /* unsigned byte -- very short int */