From 6225341737105a39562918a4b991b59cb6c435a8 Mon Sep 17 00:00:00 2001
From: Saurabh Choraria <sauc@odoo.com>
Date: Mon, 7 Aug 2023 19:21:37 +0530
Subject: [PATCH] [FIX] base_import: raise ImportValidationError when invalid
 seperator selected

When a user tries to import the CSV file with a different separator at that
time, the values in mapper and rows_to_import are not correctly mapped. So
the traceback will be generated.

Steps to reproduce:
1. Click on import in the bank statement.
2. Select any CSV file for the bank statement line or can download and import
this file https://drive.google.com/file/d/1lnScw4RN6T01pOkyNON8vvb3FQOPiy1O/view?usp=drive_link
3. Select any separator other than a comma.
4. Click on the test or Import button.
5. Error will occur.

Error: IndexError: list index out of range.

To solve this issue, a row's length is checked with the
number of fields.

sentry-4021250095

closes odoo/odoo#131153

Signed-off-by: Achraf Ben Azzouz (abz) <abz@odoo.com>
---
 addons/base_import/i18n/base_import.pot  | 9 +++++++++
 addons/base_import/models/base_import.py | 4 ++++
 2 files changed, 13 insertions(+)

diff --git a/addons/base_import/i18n/base_import.pot b/addons/base_import/i18n/base_import.pot
index 12537e2578df..f652a916dba7 100644
--- a/addons/base_import/i18n/base_import.pot
+++ b/addons/base_import/i18n/base_import.pot
@@ -293,6 +293,15 @@ msgstr ""
 msgid "Error Parsing Date [%s:L%d]: %s"
 msgstr ""
 
+#. module: base_import
+#: code:addons/base_import/models/base_import.py:0
+#, python-format
+msgid ""
+"Error while importing records: all rows should be of the same size, but the "
+"title row has %d entries while the first row has %d. You may need to change "
+"the separator character."
+msgstr ""
+
 #. module: base_import
 #. openerp-web
 #: code:addons/base_import/static/src/legacy/xml/base_import.xml:0
diff --git a/addons/base_import/models/base_import.py b/addons/base_import/models/base_import.py
index b8a34b0ea609..5c3e26731f54 100644
--- a/addons/base_import/models/base_import.py
+++ b/addons/base_import/models/base_import.py
@@ -1039,6 +1039,10 @@ class Import(models.TransientModel):
         import_fields = [f for f in fields if f]
 
         _file_length, rows_to_import = self._read_file(options)
+        if len(rows_to_import[0]) != len(fields):
+            raise ImportValidationError(
+                _("Error while importing records: all rows should be of the same size, but the title row has %d entries while the first row has %d. You may need to change the separator character.", len(fields), len(rows_to_import[0]))
+            )
 
         if options.get('has_headers'):
             rows_to_import = rows_to_import[1:]
-- 
GitLab