From 5a2e675f1410b1fcd14a8a31e0d63cd8730683ae Mon Sep 17 00:00:00 2001 From: jev-odoo Date: Fri, 20 Nov 2020 10:39:52 +0000 Subject: [PATCH] [FIX] service: rpc call with empty array (php) Before this fix, trying to authenticate via xml-rpc call from PHP following the documentation at odoo.com/documentation/14.0/webservices/odoo.html#logging-in raised an error: > $uid = $common->authenticate($db, $username, $password, array()); TypeError: 'list' object is not a mapping Because PHP doesn't have separate array and mapping types, the XML-RPC encoder disambiguates based on the existence of key => value pairs, such disambiguation yields an empty xmlrpc array for an empty PHP array, which is unexpected on the Python side. Relax the check on the Python side: * fixing this on the client side requires adding arbitrary and meaningless key => value to the empty array to force the correct disambiguation which is ugly and weird * the example code has been there for a long time, so there's probably lots of such PHP code in the wild opw-2388141 closes odoo/odoo#62101 X-original-commit: 9f97b7435977c81a079004b7c2186ce75526490c Signed-off-by: Xavier Morel (xmo) --- odoo/service/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odoo/service/common.py b/odoo/service/common.py index fa435c5197a..a7c91ef5601 100644 --- a/odoo/service/common.py +++ b/odoo/service/common.py @@ -20,7 +20,7 @@ def exp_login(db, login, password): return exp_authenticate(db, login, password, None) def exp_authenticate(db, login, password, user_agent_env): - if user_agent_env is None: + if not user_agent_env: user_agent_env = {} res_users = odoo.registry(db)['res.users'] try: