fix(crm): rollback before logging in Frappe CRM webhook handlers (Postgres)

create_prospect/create_address/create_customer insert docs and on failure call frappe.log_error with no rollback; on Postgres (untrusted external CRM webhook input) a failed insert poisons the txn so log_error raises InFailedSqlTransaction. Full frappe.db.rollback() before each log_error. No-op on MariaDB.
This commit is contained in:
Mihir Kandoi
2026-06-29 22:45:22 +05:30
parent 5110e7f0fd
commit 6b0f3cd243

View File

@@ -26,6 +26,7 @@ def create_prospect_against_crm_deal():
prospect.insert()
prospect_name = prospect.name
except Exception:
frappe.db.rollback()
frappe.log_error(
frappe.get_traceback(),
f"Error while creating prospect against CRM Deal: {frappe.form_dict.get('crm_deal_id')}",
@@ -97,6 +98,7 @@ def create_address(doctype, docname, address):
address.save(ignore_permissions=True)
return address.name
except Exception:
frappe.db.rollback()
frappe.log_error(frappe.get_traceback(), f"Error while creating address for {docname}")
@@ -157,6 +159,7 @@ def create_customer(customer_data: dict | None = None):
create_address("Customer", customer_name, customer_data.get("address"))
return customer_name
except Exception:
frappe.db.rollback()
frappe.log_error(frappe.get_traceback(), "Error while creating customer against Frappe CRM Deal")
pass