From 5a441ed6058740458b8ec549fd32931757ce4e3a Mon Sep 17 00:00:00 2001 From: yanghao Date: Fri, 27 Jul 2018 15:35:41 +0800 Subject: [PATCH 1/3] ZOOKEEPER-3105:Character coding problem occur when create a node using python3 --- src/contrib/zkpython/src/c/zookeeper.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/contrib/zkpython/src/c/zookeeper.c b/src/contrib/zkpython/src/c/zookeeper.c index 4474661860a..b946b21d23d 100644 --- a/src/contrib/zkpython/src/c/zookeeper.c +++ b/src/contrib/zkpython/src/c/zookeeper.c @@ -387,8 +387,8 @@ int parse_acls(struct ACL_vector *acls, PyObject *pyacls) PyObject *perms = PyDict_GetItemString( a, "perms" ); #if PY_MAJOR_VERSION >= 3 acls->data[i].perms = (int32_t)(PyLong_AsLong(perms)); - acls->data[i].id.id = strdup( PyUnicode_AsUnicode( PyDict_GetItemString( a, "id" ) ) ); - acls->data[i].id.scheme = strdup( PyUnicode_AsUnicode( PyDict_GetItemString( a, "scheme" ) ) ); + acls->data[i].id.id = strdup( PyBytes_AS_STRING( PyUnicode_AsASCIIString( PyDict_GetItemString( a, "id" ) ) ) ); + acls->data[i].id.scheme = strdup( PyBytes_AS_STRING( PyUnicode_AsASCIIString( PyDict_GetItemString( a, "scheme" ) ) ) ); #else acls->data[i].perms = (int32_t)(PyInt_AsLong(perms)); acls->data[i].id.id = strdup( PyString_AsString( PyDict_GetItemString( a, "id" ) ) ); From 9f2fd54ca496a986f839fc9847ce6e9aba8763d0 Mon Sep 17 00:00:00 2001 From: lordofkey Date: Thu, 30 Aug 2018 17:38:48 +0800 Subject: [PATCH 2/3] =?UTF-8?q?ZOOKEEPER-3105:Character=20coding=20problem?= =?UTF-8?q?=20occur=20when=20create=20a=20node=20usin=E2=80=A6=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zookeeper-contrib-zkpython/src/c/zookeeper.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/zookeeper-contrib/zookeeper-contrib-zkpython/src/c/zookeeper.c b/zookeeper-contrib/zookeeper-contrib-zkpython/src/c/zookeeper.c index b946b21d23d..b8941476e7b 100644 --- a/zookeeper-contrib/zookeeper-contrib-zkpython/src/c/zookeeper.c +++ b/zookeeper-contrib/zookeeper-contrib-zkpython/src/c/zookeeper.c @@ -387,8 +387,14 @@ int parse_acls(struct ACL_vector *acls, PyObject *pyacls) PyObject *perms = PyDict_GetItemString( a, "perms" ); #if PY_MAJOR_VERSION >= 3 acls->data[i].perms = (int32_t)(PyLong_AsLong(perms)); - acls->data[i].id.id = strdup( PyBytes_AS_STRING( PyUnicode_AsASCIIString( PyDict_GetItemString( a, "id" ) ) ) ); - acls->data[i].id.scheme = strdup( PyBytes_AS_STRING( PyUnicode_AsASCIIString( PyDict_GetItemString( a, "scheme" ) ) ) ); + acls->data[i].perms = (int32_t)(PyLong_AsLong(perms)); + PyObject *tem_utfstring; + tem_utfstring = PyUnicode_AsEncodedString(PyDict_GetItemString( a, "id" ), "utf-8", NULL ); + acls->data[i].id.id = strdup( PyBytes_AS_STRING(tem_utfstring)); + Py_DECREF(tem_utfstring); + tem_utfstring = PyUnicode_AsEncodedString(PyDict_GetItemString( a, "scheme" ), "utf-8", NULL ); + acls->data[i].id.scheme = strdup( PyBytes_AS_STRING(tem_utfstring) ); + Py_DECREF(tem_utfstring); #else acls->data[i].perms = (int32_t)(PyInt_AsLong(perms)); acls->data[i].id.id = strdup( PyString_AsString( PyDict_GetItemString( a, "id" ) ) ); From 24a60d9822a5c7b29a1683bac862e9df0fa99f0b Mon Sep 17 00:00:00 2001 From: lordofkey Date: Thu, 30 Aug 2018 17:47:35 +0800 Subject: [PATCH 3/3] Update zookeeper.c ZOOKEEPER-3105 --- zookeeper-contrib/zookeeper-contrib-zkpython/src/c/zookeeper.c | 1 - 1 file changed, 1 deletion(-) diff --git a/zookeeper-contrib/zookeeper-contrib-zkpython/src/c/zookeeper.c b/zookeeper-contrib/zookeeper-contrib-zkpython/src/c/zookeeper.c index b8941476e7b..add1e9b3696 100644 --- a/zookeeper-contrib/zookeeper-contrib-zkpython/src/c/zookeeper.c +++ b/zookeeper-contrib/zookeeper-contrib-zkpython/src/c/zookeeper.c @@ -386,7 +386,6 @@ int parse_acls(struct ACL_vector *acls, PyObject *pyacls) // a is now a dictionary PyObject *perms = PyDict_GetItemString( a, "perms" ); #if PY_MAJOR_VERSION >= 3 - acls->data[i].perms = (int32_t)(PyLong_AsLong(perms)); acls->data[i].perms = (int32_t)(PyLong_AsLong(perms)); PyObject *tem_utfstring; tem_utfstring = PyUnicode_AsEncodedString(PyDict_GetItemString( a, "id" ), "utf-8", NULL );