[GitHub] zookeeper pull request #586: Zookeeper 3105:Character coding problem occur w...

2018-08-24 Thread breed
Github user breed commented on a diff in the pull request:

https://github.com/apache/zookeeper/pull/586#discussion_r212781950
  
--- Diff: 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" ) ) ) );
--- End diff --

i think we can have id be "أليس" and i believe it will get messed up by 
this code. we need to use UTF-8 encoding. (unfortunately, i'm not familiar 
enough with python C-bindings to know how to do it correctly...


---


[GitHub] zookeeper pull request #586: Zookeeper 3105:Character coding problem occur w...

2018-08-05 Thread lordofkey
Github user lordofkey commented on a diff in the pull request:

https://github.com/apache/zookeeper/pull/586#discussion_r207772138
  
--- Diff: 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" ) ) ) );
--- End diff --

i thought the value of id can be "anyone" or ip or the string like 
"usrname:password", either of them can be represented  as a string. then i 
tried "anyone", "127.0.0.1/16" and "usrname:password", and they all worked.


---


[GitHub] zookeeper pull request #586: Zookeeper 3105:Character coding problem occur w...

2018-08-03 Thread breed
Github user breed commented on a diff in the pull request:

https://github.com/apache/zookeeper/pull/586#discussion_r207599621
  
--- Diff: 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" ) ) ) );
--- End diff --

this only works for ascii strings. that should be ok for scheme, but maybe 
not for id.


---


[GitHub] zookeeper pull request #586: Zookeeper 3105:Character coding problem occur w...

2018-07-27 Thread lordofkey
GitHub user lordofkey opened a pull request:

https://github.com/apache/zookeeper/pull/586

Zookeeper 3105:Character coding problem occur when create a node using 
python3

when creating a node using python3, InvalidACLException occurs all the 
time. it`s caused by imcompatible way of parsing acl passed through python3 api.
so

```
acls->data[i].id.id = strdup( PyUnicode_AsUnicode( PyDict_GetItemString( a, 
"id" ) ) );
acls->data[i].id.scheme = strdup( PyUnicode_AsUnicode( 
PyDict_GetItemString( a, "scheme" ) ) );
```
is changed to

```
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" ) ) ) );
```

because `acls->data[i].id.id` and `acls->data[i].id.scheme` must be an 
ASCII string.

You can merge this pull request into a Git repository by running:

$ git pull https://github.com/lordofkey/zookeeper ZOOKEEPER-3105

Alternatively you can review and apply these changes as the patch at:

https://github.com/apache/zookeeper/pull/586.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

This closes #586


commit 5a441ed6058740458b8ec549fd32931757ce4e3a
Author: yanghao 
Date:   2018-07-27T07:35:41Z

ZOOKEEPER-3105:Character coding problem occur when create a node using 
python3




---