Public bug reported:

If user passes member as Unicode character while creating member for
image then he will get HTTP 500 error.

Steps to reproduce:

1. Create image
2. Assign member to image using
   $ glance member-create e64f4347-51d6-4f97-8b6e-02e40c7ecb30 𠜎

   or using curl
   $ curl -g -i -X POST 
http://10.232.48.198:9292/v2/images/e64f4347-51d6-4f97-8b6e-02e40c7ecb30/members
 -H "User-Agent: python-glanceclient" -H "Content-Type: application/json" -H 
"X-Auth-Token: 
gAAAAABZCs01HPjCjKDkYnWQECtu9dYOxySXXrMH-lH4xO9xZBtl4MXNIPbTwkuCWSQ4EOh0tKvOPz55DmMdyOM0RYziM-qNE2Jikncq2oExZvf6k8OZYj_Vad5Q04p_uCU0Rg-9b94mVFfv_HaImCnT9ofO6RQZyNLOf1zc-AOzQPOMnjv9e4g"
 -d '{"member": "𠜎"}'

Output:
<html>
 <head>
  <title>500 Internal Server Error</title>
 </head>
 <body>
  <h1>500 Internal Server Error</h1>
  The server has either erred or is incapable of performing the requested 
operation.<br /><br />

 </body>
</html>

API Logs:
500 Internal Server Error: The server has either erred or is incapable of 
performing the requested operation. (HTTP 500)

2017-05-04 12:18:14.460 TRACE glance.common.wsgi     self._flush(objects)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2259, 
in _flush
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     
transaction.rollback(_capture_exception=True)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 
66, in __exit__
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     compat.reraise(exc_type, 
exc_value, exc_tb)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2223, 
in _flush
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     flush_context.execute()
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 
389, in execute
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     rec.execute(self)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 
548, in execute
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     uow
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 
181, in save_obj
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     mapper, table, insert)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 
835, in _emit_insert_statements
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     execute(statement, params)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 945, 
in execute
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     return meth(self, 
multiparams, params)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 263, 
in _execute_on_connection
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     return 
connection._execute_clauseelement(self, multiparams, params)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1053, 
in _execute_clauseelement
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     compiled_sql, 
distilled_params
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1189, 
in _execute_context
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     context)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1398, 
in _handle_dbapi_exception
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     
util.raise_from_cause(newraise, exc_info)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 203, 
in raise_from_cause
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     reraise(type(exception), 
exception, tb=exc_tb, cause=cause)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1182, 
in _execute_context
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     context)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 
470, in do_execute
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     cursor.execute(statement, 
parameters)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in 
execute
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     result = self._query(query)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     conn.query(q)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 856, in 
query
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     self._affected_rows = 
self._read_query_result(unbuffered=unbuffered)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1057, in 
_read_query_result
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     result.read()
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1340, in 
read
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     first_packet = 
self.connection._read_packet()
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1014, in 
_read_packet
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     packet.check_error()
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in 
check_error
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     
err.raise_mysql_exception(self._data)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in 
raise_mysql_exception
2017-05-04 12:18:14.460 TRACE glance.common.wsgi     raise errorclass(errno, 
errval)
2017-05-04 12:18:14.460 TRACE glance.common.wsgi DBDataError: 
(pymysql.err.InternalError) (1366, u"Incorrect string value: 
'\\xF0\\xA0\\x9C\\x8E' for column 'member' at row 1") [SQL: u'INSERT INTO 
image_members (created_at, updated_at, deleted_at, deleted, image_id, member, 
can_share, status) VALUES (%(created_at)s, %(updated_at)s, %(deleted_at)s, 
%(deleted)s, %(image_id)s, %(member)s, %(can_share)s, %(status)s)'] 
[parameters: {'status': 'pending', 'deleted': 0, 'created_at': 
datetime.datetime(2017, 5, 4, 6, 48, 14, 458976), 'updated_at': 
datetime.datetime(2017, 5, 4, 6, 48, 14, 458985), 'member': u'\U0002070e', 
'image_id': u'e64f4347-51d6-4f97-8b6e-02e40c7ecb30', 'can_share': 0, 
'deleted_at': None}]

** Affects: glance
     Importance: Undecided
     Assignee: Neha Pandey (nehapandey)
         Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to Glance.
https://bugs.launchpad.net/bugs/1688189

Title:
  Member create raises 500 error for unicode charater values

Status in Glance:
  New

Bug description:
  If user passes member as Unicode character while creating member for
  image then he will get HTTP 500 error.

  Steps to reproduce:

  1. Create image
  2. Assign member to image using
     $ glance member-create e64f4347-51d6-4f97-8b6e-02e40c7ecb30 𠜎

     or using curl
     $ curl -g -i -X POST 
http://10.232.48.198:9292/v2/images/e64f4347-51d6-4f97-8b6e-02e40c7ecb30/members
 -H "User-Agent: python-glanceclient" -H "Content-Type: application/json" -H 
"X-Auth-Token: 
gAAAAABZCs01HPjCjKDkYnWQECtu9dYOxySXXrMH-lH4xO9xZBtl4MXNIPbTwkuCWSQ4EOh0tKvOPz55DmMdyOM0RYziM-qNE2Jikncq2oExZvf6k8OZYj_Vad5Q04p_uCU0Rg-9b94mVFfv_HaImCnT9ofO6RQZyNLOf1zc-AOzQPOMnjv9e4g"
 -d '{"member": "𠜎"}'

  Output:
  <html>
   <head>
    <title>500 Internal Server Error</title>
   </head>
   <body>
    <h1>500 Internal Server Error</h1>
    The server has either erred or is incapable of performing the requested 
operation.<br /><br />

   </body>
  </html>

  API Logs:
  500 Internal Server Error: The server has either erred or is incapable of 
performing the requested operation. (HTTP 500)

  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     self._flush(objects)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2259, 
in _flush
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     
transaction.rollback(_capture_exception=True)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 
66, in __exit__
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     compat.reraise(exc_type, 
exc_value, exc_tb)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2223, 
in _flush
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     flush_context.execute()
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 
389, in execute
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     rec.execute(self)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 
548, in execute
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     uow
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 
181, in save_obj
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     mapper, table, insert)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 
835, in _emit_insert_statements
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     execute(statement, 
params)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 945, 
in execute
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     return meth(self, 
multiparams, params)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 263, 
in _execute_on_connection
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     return 
connection._execute_clauseelement(self, multiparams, params)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1053, 
in _execute_clauseelement
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     compiled_sql, 
distilled_params
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1189, 
in _execute_context
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     context)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1398, 
in _handle_dbapi_exception
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     
util.raise_from_cause(newraise, exc_info)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 203, 
in raise_from_cause
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     reraise(type(exception), 
exception, tb=exc_tb, cause=cause)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1182, 
in _execute_context
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     context)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 
470, in do_execute
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     
cursor.execute(statement, parameters)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in 
execute
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     result = 
self._query(query)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     conn.query(q)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 856, in 
query
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     self._affected_rows = 
self._read_query_result(unbuffered=unbuffered)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1057, in 
_read_query_result
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     result.read()
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1340, in 
read
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     first_packet = 
self.connection._read_packet()
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1014, in 
_read_packet
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     packet.check_error()
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in 
check_error
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     
err.raise_mysql_exception(self._data)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in 
raise_mysql_exception
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi     raise errorclass(errno, 
errval)
  2017-05-04 12:18:14.460 TRACE glance.common.wsgi DBDataError: 
(pymysql.err.InternalError) (1366, u"Incorrect string value: 
'\\xF0\\xA0\\x9C\\x8E' for column 'member' at row 1") [SQL: u'INSERT INTO 
image_members (created_at, updated_at, deleted_at, deleted, image_id, member, 
can_share, status) VALUES (%(created_at)s, %(updated_at)s, %(deleted_at)s, 
%(deleted)s, %(image_id)s, %(member)s, %(can_share)s, %(status)s)'] 
[parameters: {'status': 'pending', 'deleted': 0, 'created_at': 
datetime.datetime(2017, 5, 4, 6, 48, 14, 458976), 'updated_at': 
datetime.datetime(2017, 5, 4, 6, 48, 14, 458985), 'member': u'\U0002070e', 
'image_id': u'e64f4347-51d6-4f97-8b6e-02e40c7ecb30', 'can_share': 0, 
'deleted_at': None}]

To manage notifications about this bug go to:
https://bugs.launchpad.net/glance/+bug/1688189/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to