diff --git a/7.3.658 b/7.3.658 new file mode 100644 index 0000000..eeec468 --- /dev/null +++ b/7.3.658 @@ -0,0 +1,159 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.658 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.658 +Problem: NUL bytes truncate strings when converted from Python. +Solution: Handle truncation as an error. (ZyX) +Files: src/if_py_both.h, src/if_python3.c + + +*** ../vim-7.3.657/src/if_py_both.h 2012-09-05 18:45:24.000000000 +0200 +--- src/if_py_both.h 2012-09-05 19:05:27.000000000 +0200 +*************** +*** 2530,2537 **** + #if PY_MAJOR_VERSION >= 3 + else if (PyBytes_Check(obj)) + { +! char_u *result = (char_u *) PyBytes_AsString(obj); + + if (result == NULL) + return -1; + +--- 2530,2539 ---- + #if PY_MAJOR_VERSION >= 3 + else if (PyBytes_Check(obj)) + { +! char_u *result; + ++ if (PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1) ++ return -1; + if (result == NULL) + return -1; + +*************** +*** 2549,2555 **** + if (bytes == NULL) + return -1; + +! result = (char_u *) PyBytes_AsString(bytes); + if (result == NULL) + return -1; + +--- 2551,2558 ---- + if (bytes == NULL) + return -1; + +! if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1) +! return -1; + if (result == NULL) + return -1; + +*************** +*** 2572,2578 **** + if (bytes == NULL) + return -1; + +! result=(char_u *) PyString_AsString(bytes); + if (result == NULL) + return -1; + +--- 2575,2582 ---- + if (bytes == NULL) + return -1; + +! if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1) +! return -1; + if (result == NULL) + return -1; + +*************** +*** 2587,2594 **** + } + else if (PyString_Check(obj)) + { +! char_u *result = (char_u *) PyString_AsString(obj); + + if (result == NULL) + return -1; + +--- 2591,2600 ---- + } + else if (PyString_Check(obj)) + { +! char_u *result; + ++ if(PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1) ++ return -1; + if (result == NULL) + return -1; + +*** ../vim-7.3.657/src/if_python3.c 2012-09-05 19:03:51.000000000 +0200 +--- src/if_python3.c 2012-09-05 19:05:27.000000000 +0200 +*************** +*** 85,90 **** +--- 85,91 ---- + #define PyString_AsString(obj) PyBytes_AsString(obj) + #define PyString_Size(obj) PyBytes_GET_SIZE(bytes) + #define PyString_FromString(repr) PyUnicode_FromString(repr) ++ #define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len) + + #if defined(DYNAMIC_PYTHON3) || defined(PROTO) + +*************** +*** 552,558 **** + #define DICTKEY_GET(err) \ + if (PyBytes_Check(keyObject)) \ + { \ +! if (PyBytes_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ + return err; \ + } \ + else if (PyUnicode_Check(keyObject)) \ +--- 553,559 ---- + #define DICTKEY_GET(err) \ + if (PyBytes_Check(keyObject)) \ + { \ +! if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ + return err; \ + } \ + else if (PyUnicode_Check(keyObject)) \ +*************** +*** 560,566 **** + bytes = PyString_AsBytes(keyObject); \ + if (bytes == NULL) \ + return err; \ +! if (PyBytes_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \ + return err; \ + } \ + else \ +--- 561,567 ---- + bytes = PyString_AsBytes(keyObject); \ + if (bytes == NULL) \ + return err; \ +! if (PyString_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \ + return err; \ + } \ + else \ +*** ../vim-7.3.657/src/version.c 2012-09-05 19:03:51.000000000 +0200 +--- src/version.c 2012-09-05 19:07:40.000000000 +0200 +*************** +*** 721,722 **** +--- 721,724 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 658, + /**/ + +-- +You know you use Vim too much when you have this alias in your +~/.bashrc file: alias :e=/bin/vim (Eljay Love-Jensen) + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///