Ignore:
Timestamp:
Mar 19, 2014, 11:11:30 AM (11 years ago)
Author:
dmik
Message:

python: Update vendor to 2.7.6.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • python/vendor/current/Modules/md5module.c

    r2 r388  
    1515
    1616typedef struct {
    17         PyObject_HEAD
    18         md5_state_t     md5;            /* the context holder */
     17    PyObject_HEAD
     18    md5_state_t         md5;            /* the context holder */
    1919} md5object;
    2020
    2121static PyTypeObject MD5type;
    2222
    23 #define is_md5object(v)         ((v)->ob_type == &MD5type)
     23#define is_md5object(v)         ((v)->ob_type == &MD5type)
    2424
    2525static md5object *
    2626newmd5object(void)
    2727{
    28         md5object *md5p;
    29 
    30         md5p = PyObject_New(md5object, &MD5type);
    31         if (md5p == NULL)
    32                 return NULL;
    33 
    34         md5_init(&md5p->md5);   /* actual initialisation */
    35         return md5p;
     28    md5object *md5p;
     29
     30    md5p = PyObject_New(md5object, &MD5type);
     31    if (md5p == NULL)
     32        return NULL;
     33
     34    md5_init(&md5p->md5);       /* actual initialisation */
     35    return md5p;
    3636}
    3737
     
    4242md5_dealloc(md5object *md5p)
    4343{
    44         PyObject_Del(md5p);
     44    PyObject_Del(md5p);
    4545}
    4646
     
    5151md5_update(md5object *self, PyObject *args)
    5252{
    53         unsigned char *cp;
    54         int len;
    55 
    56         if (!PyArg_ParseTuple(args, "s#:update", &cp, &len))
    57                 return NULL;
    58 
    59         md5_append(&self->md5, cp, len);
    60 
    61         Py_INCREF(Py_None);
    62         return Py_None;
     53    Py_buffer view;
     54    Py_ssize_t n;
     55    unsigned char *buf;
     56
     57    if (!PyArg_ParseTuple(args, "s*:update", &view))
     58        return NULL;
     59
     60    n = view.len;
     61    buf = (unsigned char *) view.buf;
     62    while (n > 0) {
     63        Py_ssize_t nbytes;
     64        if (n > INT_MAX)
     65            nbytes = INT_MAX;
     66        else
     67            nbytes = n;
     68        md5_append(&self->md5, buf,
     69                   Py_SAFE_DOWNCAST(nbytes, Py_ssize_t, unsigned int));
     70        buf += nbytes;
     71        n -= nbytes;
     72    }
     73
     74    PyBuffer_Release(&view);
     75    Py_RETURN_NONE;
    6376}
    6477
     
    7487md5_digest(md5object *self)
    7588{
    76         md5_state_t mdContext;
    77         unsigned char aDigest[16];
    78 
    79         /* make a temporary copy, and perform the final */
    80         mdContext = self->md5;
    81         md5_finish(&mdContext, aDigest);
    82 
    83         return PyString_FromStringAndSize((char *)aDigest, 16);
     89    md5_state_t mdContext;
     90    unsigned char aDigest[16];
     91
     92    /* make a temporary copy, and perform the final */
     93    mdContext = self->md5;
     94    md5_finish(&mdContext, aDigest);
     95
     96    return PyString_FromStringAndSize((char *)aDigest, 16);
    8497}
    8598
     
    95108md5_hexdigest(md5object *self)
    96109{
    97         md5_state_t mdContext;
    98         unsigned char digest[16];
    99         unsigned char hexdigest[32];
    100         int i, j;
    101 
    102         /* make a temporary copy, and perform the final */
    103         mdContext = self->md5;
    104         md5_finish(&mdContext, digest);
    105 
    106         /* Make hex version of the digest */
    107         for(i=j=0; i<16; i++) {
    108                 char c;
    109                 c = (digest[i] >> 4) & 0xf;
    110                 c = (c>9) ? c+'a'-10 : c + '0';
    111                 hexdigest[j++] = c;
    112                 c = (digest[i] & 0xf);
    113                 c = (c>9) ? c+'a'-10 : c + '0';
    114                 hexdigest[j++] = c;
    115         }
    116         return PyString_FromStringAndSize((char*)hexdigest, 32);
     110    md5_state_t mdContext;
     111    unsigned char digest[16];
     112    unsigned char hexdigest[32];
     113    int i, j;
     114
     115    /* make a temporary copy, and perform the final */
     116    mdContext = self->md5;
     117    md5_finish(&mdContext, digest);
     118
     119    /* Make hex version of the digest */
     120    for(i=j=0; i<16; i++) {
     121        char c;
     122        c = (digest[i] >> 4) & 0xf;
     123        c = (c>9) ? c+'a'-10 : c + '0';
     124        hexdigest[j++] = c;
     125        c = (digest[i] & 0xf);
     126        c = (c>9) ? c+'a'-10 : c + '0';
     127        hexdigest[j++] = c;
     128    }
     129    return PyString_FromStringAndSize((char*)hexdigest, 32);
    117130}
    118131
     
    127140md5_copy(md5object *self)
    128141{
    129         md5object *md5p;
    130 
    131         if ((md5p = newmd5object()) == NULL)
    132                 return NULL;
    133 
    134         md5p->md5 = self->md5;
    135 
    136         return (PyObject *)md5p;
     142    md5object *md5p;
     143
     144    if ((md5p = newmd5object()) == NULL)
     145        return NULL;
     146
     147    md5p->md5 = self->md5;
     148
     149    return (PyObject *)md5p;
    137150}
    138151
     
    144157
    145158static PyMethodDef md5_methods[] = {
    146         {"update",    (PyCFunction)md5_update,    METH_VARARGS, update_doc},
    147         {"digest",    (PyCFunction)md5_digest,    METH_NOARGS,  digest_doc},
    148         {"hexdigest", (PyCFunction)md5_hexdigest, METH_NOARGS,  hexdigest_doc},
    149         {"copy",      (PyCFunction)md5_copy,      METH_NOARGS,  copy_doc},
    150         {NULL, NULL}                         /* sentinel */
     159    {"update",    (PyCFunction)md5_update,    METH_VARARGS, update_doc},
     160    {"digest",    (PyCFunction)md5_digest,    METH_NOARGS,  digest_doc},
     161    {"hexdigest", (PyCFunction)md5_hexdigest, METH_NOARGS,  hexdigest_doc},
     162    {"copy",      (PyCFunction)md5_copy,      METH_NOARGS,  copy_doc},
     163    {NULL, NULL}                             /* sentinel */
    151164};
    152165
     
    222235
    223236static PyTypeObject MD5type = {
    224         PyVarObject_HEAD_INIT(NULL, 0)
    225         "_md5.md5",               /*tp_name*/
    226         sizeof(md5object),        /*tp_size*/
    227         0,                        /*tp_itemsize*/
    228         /* methods */
    229         (destructor)md5_dealloc,  /*tp_dealloc*/
    230         0,                        /*tp_print*/
    231         0,                        /*tp_getattr*/
    232         0,                        /*tp_setattr*/
    233         0,                        /*tp_compare*/
    234         0,                        /*tp_repr*/
    235         0,                        /*tp_as_number*/
    236         0,                        /*tp_as_sequence*/
    237         0,                        /*tp_as_mapping*/
    238         0,                        /*tp_hash*/
    239         0,                        /*tp_call*/
    240         0,                        /*tp_str*/
    241         0,                        /*tp_getattro*/
    242         0,                        /*tp_setattro*/
    243         0,                        /*tp_as_buffer*/
    244         Py_TPFLAGS_DEFAULT,       /*tp_flags*/
    245         md5type_doc,              /*tp_doc*/
    246         0,                        /*tp_traverse*/
    247         0,                        /*tp_clear*/
    248         0,                        /*tp_richcompare*/
    249         0,                        /*tp_weaklistoffset*/
    250         0,                        /*tp_iter*/
    251         0,                        /*tp_iternext*/
    252         md5_methods,              /*tp_methods*/
    253         0,                        /*tp_members*/
    254         md5_getseters,            /*tp_getset*/
     237    PyVarObject_HEAD_INIT(NULL, 0)
     238    "_md5.md5",                   /*tp_name*/
     239    sizeof(md5object),            /*tp_size*/
     240    0,                            /*tp_itemsize*/
     241    /* methods */
     242    (destructor)md5_dealloc,  /*tp_dealloc*/
     243    0,                            /*tp_print*/
     244    0,                        /*tp_getattr*/
     245    0,                            /*tp_setattr*/
     246    0,                            /*tp_compare*/
     247    0,                            /*tp_repr*/
     248    0,                            /*tp_as_number*/
     249    0,                        /*tp_as_sequence*/
     250    0,                            /*tp_as_mapping*/
     251    0,                            /*tp_hash*/
     252    0,                            /*tp_call*/
     253    0,                            /*tp_str*/
     254    0,                            /*tp_getattro*/
     255    0,                            /*tp_setattro*/
     256    0,                            /*tp_as_buffer*/
     257    Py_TPFLAGS_DEFAULT,           /*tp_flags*/
     258    md5type_doc,                  /*tp_doc*/
     259    0,                        /*tp_traverse*/
     260    0,                            /*tp_clear*/
     261    0,                            /*tp_richcompare*/
     262    0,                            /*tp_weaklistoffset*/
     263    0,                            /*tp_iter*/
     264    0,                            /*tp_iternext*/
     265    md5_methods,                  /*tp_methods*/
     266    0,                            /*tp_members*/
     267    md5_getseters,            /*tp_getset*/
    255268};
    256269
     
    261274MD5_new(PyObject *self, PyObject *args)
    262275{
    263         md5object *md5p;
    264         unsigned char *cp = NULL;
    265         int len = 0;
    266 
    267         if (!PyArg_ParseTuple(args, "|s#:new", &cp, &len))
    268                 return NULL;
    269 
    270         if ((md5p = newmd5object()) == NULL)
    271                 return NULL;
    272 
    273         if (cp)
    274                 md5_append(&md5p->md5, cp, len);
    275 
    276         return (PyObject *)md5p;
     276    md5object *md5p;
     277    Py_buffer view = { 0 };
     278    Py_ssize_t n;
     279    unsigned char *buf;
     280
     281    if (!PyArg_ParseTuple(args, "|s*:new", &view))
     282        return NULL;
     283
     284    if ((md5p = newmd5object()) == NULL) {
     285        PyBuffer_Release(&view);
     286        return NULL;
     287    }
     288
     289    n = view.len;
     290    buf = (unsigned char *) view.buf;
     291    while (n > 0) {
     292        Py_ssize_t nbytes;
     293        if (n > INT_MAX)
     294            nbytes = INT_MAX;
     295        else
     296            nbytes = n;
     297        md5_append(&md5p->md5, buf,
     298                   Py_SAFE_DOWNCAST(nbytes, Py_ssize_t, unsigned int));
     299        buf += nbytes;
     300        n -= nbytes;
     301    }
     302    PyBuffer_Release(&view);
     303
     304    return (PyObject *)md5p;
    277305}
    278306
     
    287315
    288316static PyMethodDef md5_functions[] = {
    289         {"new",         (PyCFunction)MD5_new, METH_VARARGS, new_doc},
    290         {NULL,          NULL}   /* Sentinel */
     317    {"new",             (PyCFunction)MD5_new, METH_VARARGS, new_doc},
     318    {NULL,              NULL}   /* Sentinel */
    291319};
    292320
     
    297325init_md5(void)
    298326{
    299         PyObject *m, *d;
    300 
    301         Py_TYPE(&MD5type) = &PyType_Type;
    302         if (PyType_Ready(&MD5type) < 0)
    303             return;
    304         m = Py_InitModule3("_md5", md5_functions, module_doc);
    305         if (m == NULL)
    306             return;
    307         d = PyModule_GetDict(m);
    308         PyDict_SetItemString(d, "MD5Type", (PyObject *)&MD5type);
    309         PyModule_AddIntConstant(m, "digest_size", 16);
    310         /* No need to check the error here, the caller will do that */
    311 }
     327    PyObject *m, *d;
     328
     329    Py_TYPE(&MD5type) = &PyType_Type;
     330    if (PyType_Ready(&MD5type) < 0)
     331        return;
     332    m = Py_InitModule3("_md5", md5_functions, module_doc);
     333    if (m == NULL)
     334        return;
     335    d = PyModule_GetDict(m);
     336    PyDict_SetItemString(d, "MD5Type", (PyObject *)&MD5type);
     337    PyModule_AddIntConstant(m, "digest_size", 16);
     338    /* No need to check the error here, the caller will do that */
     339}
Note: See TracChangeset for help on using the changeset viewer.