Mercurial > vim
comparison src/if_python3.c @ 3798:3958b0e672d6 v7.3.657
updated for version 7.3.657
Problem: Python bindings silently truncate string values containing NUL.
Solution: Fail when a string contains NUL. (ZyX)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 05 Sep 2012 19:03:56 +0200 |
parents | a2f61b2b8e77 |
children | 15cdcb8ddcfb |
comparison
equal
deleted
inserted
replaced
3797:bf0ee2f87e3b | 3798:3958b0e672d6 |
---|---|
170 # define _PyUnicode_AsString py3__PyUnicode_AsString | 170 # define _PyUnicode_AsString py3__PyUnicode_AsString |
171 # undef PyUnicode_AsEncodedString | 171 # undef PyUnicode_AsEncodedString |
172 # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString | 172 # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString |
173 # undef PyBytes_AsString | 173 # undef PyBytes_AsString |
174 # define PyBytes_AsString py3_PyBytes_AsString | 174 # define PyBytes_AsString py3_PyBytes_AsString |
175 # define PyBytes_AsStringAndSize py3_PyBytes_AsStringAndSize | |
175 # undef PyBytes_FromString | 176 # undef PyBytes_FromString |
176 # define PyBytes_FromString py3_PyBytes_FromString | 177 # define PyBytes_FromString py3_PyBytes_FromString |
177 # define PyFloat_FromDouble py3_PyFloat_FromDouble | 178 # define PyFloat_FromDouble py3_PyFloat_FromDouble |
178 # define PyFloat_AsDouble py3_PyFloat_AsDouble | 179 # define PyFloat_AsDouble py3_PyFloat_AsDouble |
179 # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr | 180 # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr |
271 static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o); | 272 static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o); |
272 static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void)); | 273 static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void)); |
273 static char* (*py3__PyUnicode_AsString)(PyObject *unicode); | 274 static char* (*py3__PyUnicode_AsString)(PyObject *unicode); |
274 static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors); | 275 static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors); |
275 static char* (*py3_PyBytes_AsString)(PyObject *bytes); | 276 static char* (*py3_PyBytes_AsString)(PyObject *bytes); |
277 static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, int *length); | |
276 static PyObject* (*py3_PyBytes_FromString)(char *str); | 278 static PyObject* (*py3_PyBytes_FromString)(char *str); |
277 static PyObject* (*py3_PyFloat_FromDouble)(double num); | 279 static PyObject* (*py3_PyFloat_FromDouble)(double num); |
278 static double (*py3_PyFloat_AsDouble)(PyObject *); | 280 static double (*py3_PyFloat_AsDouble)(PyObject *); |
279 static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name); | 281 static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name); |
280 static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version); | 282 static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version); |
377 {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init}, | 379 {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init}, |
378 {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject}, | 380 {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject}, |
379 {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab}, | 381 {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab}, |
380 {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString}, | 382 {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString}, |
381 {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString}, | 383 {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString}, |
384 {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize}, | |
382 {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString}, | 385 {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString}, |
383 {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble}, | 386 {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble}, |
384 {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble}, | 387 {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble}, |
385 {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr}, | 388 {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr}, |
386 {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2}, | 389 {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2}, |
542 | 545 |
543 static int py3initialised = 0; | 546 static int py3initialised = 0; |
544 | 547 |
545 #define PYINITIALISED py3initialised | 548 #define PYINITIALISED py3initialised |
546 | 549 |
547 /* Add conversion from PyInt? */ | 550 #define DICTKEY_DECL PyObject *bytes = NULL; |
551 | |
548 #define DICTKEY_GET(err) \ | 552 #define DICTKEY_GET(err) \ |
549 if (PyBytes_Check(keyObject)) \ | 553 if (PyBytes_Check(keyObject)) \ |
550 key = (char_u *) PyBytes_AsString(keyObject); \ | 554 { \ |
555 if (PyBytes_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ | |
556 return err; \ | |
557 } \ | |
551 else if (PyUnicode_Check(keyObject)) \ | 558 else if (PyUnicode_Check(keyObject)) \ |
552 { \ | 559 { \ |
553 bytes = PyString_AsBytes(keyObject); \ | 560 bytes = PyString_AsBytes(keyObject); \ |
554 if (bytes == NULL) \ | 561 if (bytes == NULL) \ |
555 return err; \ | 562 return err; \ |
556 key = (char_u *) PyBytes_AsString(bytes); \ | 563 if (PyBytes_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \ |
557 if (key == NULL) \ | |
558 return err; \ | 564 return err; \ |
559 } \ | 565 } \ |
560 else \ | 566 else \ |
561 { \ | 567 { \ |
562 PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \ | 568 PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \ |
563 return err; \ | 569 return err; \ |
564 } | 570 } |
571 | |
565 #define DICTKEY_UNREF \ | 572 #define DICTKEY_UNREF \ |
566 if (bytes != NULL) \ | 573 if (bytes != NULL) \ |
567 Py_XDECREF(bytes); | 574 Py_XDECREF(bytes); |
568 | |
569 #define DICTKEY_DECL PyObject *bytes = NULL; | |
570 | 575 |
571 /* | 576 /* |
572 * Include the code shared with if_python.c | 577 * Include the code shared with if_python.c |
573 */ | 578 */ |
574 #include "if_py_both.h" | 579 #include "if_py_both.h" |