Mercurial > vim
comparison src/if_python3.c @ 3800:15cdcb8ddcfb v7.3.658
updated for version 7.3.658
Problem: NUL bytes truncate strings when converted from Python.
Solution: Handle truncation as an error. (ZyX)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 05 Sep 2012 19:09:11 +0200 |
parents | 3958b0e672d6 |
children | 5e909c379a1e |
comparison
equal
deleted
inserted
replaced
3799:48a53e1b08cd | 3800:15cdcb8ddcfb |
---|---|
83 #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER) | 83 #define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER) |
84 #define PyString_FreeBytes(obj) Py_XDECREF(bytes) | 84 #define PyString_FreeBytes(obj) Py_XDECREF(bytes) |
85 #define PyString_AsString(obj) PyBytes_AsString(obj) | 85 #define PyString_AsString(obj) PyBytes_AsString(obj) |
86 #define PyString_Size(obj) PyBytes_GET_SIZE(bytes) | 86 #define PyString_Size(obj) PyBytes_GET_SIZE(bytes) |
87 #define PyString_FromString(repr) PyUnicode_FromString(repr) | 87 #define PyString_FromString(repr) PyUnicode_FromString(repr) |
88 #define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len) | |
88 | 89 |
89 #if defined(DYNAMIC_PYTHON3) || defined(PROTO) | 90 #if defined(DYNAMIC_PYTHON3) || defined(PROTO) |
90 | 91 |
91 # ifndef WIN3264 | 92 # ifndef WIN3264 |
92 # include <dlfcn.h> | 93 # include <dlfcn.h> |
550 #define DICTKEY_DECL PyObject *bytes = NULL; | 551 #define DICTKEY_DECL PyObject *bytes = NULL; |
551 | 552 |
552 #define DICTKEY_GET(err) \ | 553 #define DICTKEY_GET(err) \ |
553 if (PyBytes_Check(keyObject)) \ | 554 if (PyBytes_Check(keyObject)) \ |
554 { \ | 555 { \ |
555 if (PyBytes_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ | 556 if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ |
556 return err; \ | 557 return err; \ |
557 } \ | 558 } \ |
558 else if (PyUnicode_Check(keyObject)) \ | 559 else if (PyUnicode_Check(keyObject)) \ |
559 { \ | 560 { \ |
560 bytes = PyString_AsBytes(keyObject); \ | 561 bytes = PyString_AsBytes(keyObject); \ |
561 if (bytes == NULL) \ | 562 if (bytes == NULL) \ |
562 return err; \ | 563 return err; \ |
563 if (PyBytes_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \ | 564 if (PyString_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \ |
564 return err; \ | 565 return err; \ |
565 } \ | 566 } \ |
566 else \ | 567 else \ |
567 { \ | 568 { \ |
568 PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \ | 569 PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \ |