changeset: 95801:7f0811452d0f user: Gregory P. Smith date: Sun Apr 26 00:42:13 2015 +0000 files: Modules/binascii.c description: Switch binascii over to using the common _Py_strhex implementation for its hex and hexlify functions. issue9951. diff -r a7737204c221 -r 7f0811452d0f Modules/binascii.c --- a/Modules/binascii.c Sun Apr 26 00:41:00 2015 +0000 +++ b/Modules/binascii.c Sun Apr 26 00:42:13 2015 +0000 @@ -56,6 +56,7 @@ #define PY_SSIZE_T_CLEAN #include "Python.h" +#include "pystrhex.h" #ifdef USE_ZLIB_CRC32 #include "zlib.h" #endif @@ -1117,33 +1118,7 @@ binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=179318922c2f8fda input=96423cfa299ff3b1]*/ { - char* argbuf; - Py_ssize_t arglen; - PyObject *retval; - char* retbuf; - Py_ssize_t i, j; - - argbuf = data->buf; - arglen = data->len; - - assert(arglen >= 0); - if (arglen > PY_SSIZE_T_MAX / 2) - return PyErr_NoMemory(); - - retval = PyBytes_FromStringAndSize(NULL, arglen*2); - if (!retval) - return NULL; - retbuf = PyBytes_AS_STRING(retval); - - /* make hex version of string, taken from shamodule.c */ - for (i=j=0; i < arglen; i++) { - unsigned char c; - c = (argbuf[i] >> 4) & 0xf; - retbuf[j++] = Py_hexdigits[c]; - c = argbuf[i] & 0xf; - retbuf[j++] = Py_hexdigits[c]; - } - return retval; + return _Py_strhex_bytes((const char *)data->buf, data->len); } /*[clinic input] @@ -1158,7 +1133,7 @@ binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data) /*[clinic end generated code: output=6098440091fb61dc input=2e3afae7f083f061]*/ { - return binascii_b2a_hex_impl(module, data); + return _Py_strhex_bytes((const char *)data->buf, data->len); } static int