From be48a1402cfcab733ce37910bc1b567b01f72747 Mon Sep 17 00:00:00 2001 From: Joren Van Onder Date: Wed, 25 May 2016 08:53:48 +0200 Subject: [PATCH] [FIX] hr_payroll: avoid infinite recursion The get_recursive_parent function seemingly depended on the ordering of the rule_categories recordset which happens to work fine in most cases because all data first defines the parent before defining the children rule categories. But if you happen to do it the other way around it won't work and it will infinitely call itself because: if rule_categories[0].parent_id: rule_categories = rule_categories[0].parent_id | rule_categories won't change the value of rule_categories[0]. opw-673222 (loosely related) --- .../hr_payroll/report/report_payslip_details.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/addons/hr_payroll/report/report_payslip_details.py b/addons/hr_payroll/report/report_payslip_details.py index f521cdb320d..7bfa1802ee4 100644 --- a/addons/hr_payroll/report/report_payslip_details.py +++ b/addons/hr_payroll/report/report_payslip_details.py @@ -37,13 +37,16 @@ class payslip_details_report(report_sxw.rml_parse): payslip_line = self.pool.get('hr.payslip.line') rule_cate_obj = self.pool.get('hr.salary.rule.category') - def get_recursive_parent(rule_categories): - if not rule_categories: - return [] - if rule_categories[0].parent_id: - rule_categories = rule_categories[0].parent_id | rule_categories - get_recursive_parent(rule_categories) - return rule_categories + def get_recursive_parent(current_rule_category, rule_categories = None): + if rule_categories: + rule_categories = current_rule_category | rule_categories + else: + rule_categories = current_rule_category + + if current_rule_category.parent_id: + return get_recursive_parent(current_rule_category.parent_id, rule_categories) + else: + return rule_categories res = [] result = {}