diff --git a/mysql-test/r/csv.result b/mysql-test/r/csv.result
index e342af32a802993da8d67533c70086d88b68573a..222d4de8059e1e75e3b2c72c4bfa278476e6c75a 100644
--- a/mysql-test/r/csv.result
+++ b/mysql-test/r/csv.result
@@ -5205,3 +5205,22 @@ select * from bug15205;
 val
 drop table bug15205;
 drop table bug15205_2;
+create table bug22080_1 (id int,string varchar(64)) Engine=CSV;
+create table bug22080_2 (id int,string varchar(64)) Engine=CSV;
+create table bug22080_3 (id int,string varchar(64)) Engine=CSV;
+insert into bug22080_1 values(1,'string');
+insert into bug22080_1 values(2,'string');
+insert into bug22080_1 values(3,'string');
+"1","string"
+2","string"
+"3","string"
+check table bug22080_2;
+Table	Op	Msg_type	Msg_text
+test.bug22080_2	check	error	Corrupt
+"1","string"
+"2",string"
+"3","string"
+check table bug22080_3;
+Table	Op	Msg_type	Msg_text
+test.bug22080_3	check	error	Corrupt
+drop tables bug22080_1,bug22080_2,bug22080_3;
diff --git a/mysql-test/t/csv.test b/mysql-test/t/csv.test
index 9815da4fb55da3efeeeb974ba64e06add4faf274..f70b5b4076699553f35d7aadec3634a4c9f4c767 100644
--- a/mysql-test/t/csv.test
+++ b/mysql-test/t/csv.test
@@ -1582,3 +1582,26 @@ select * from bug15205_2;
 select * from bug15205;
 drop table bug15205;
 drop table bug15205_2;
+
+#
+# Bug#22080 "CHECK fails to identify some corruption"
+#
+
+create table bug22080_1 (id int,string varchar(64)) Engine=CSV;
+create table bug22080_2 (id int,string varchar(64)) Engine=CSV;
+create table bug22080_3 (id int,string varchar(64)) Engine=CSV;
+insert into bug22080_1 values(1,'string');
+insert into bug22080_1 values(2,'string');
+insert into bug22080_1 values(3,'string');
+
+# Currupt the file as described in the bug report
+--exec sed -e 's/"2"/2"/' $MYSQLTEST_VARDIR/master-data/test/bug22080_1.CSV > $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV
+--exec sed -e 's/2","/2",/' $MYSQLTEST_VARDIR/master-data/test/bug22080_1.CSV > $MYSQLTEST_VARDIR/master-data/test/bug22080_3.CSV
+
+--exec cat $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV
+check table bug22080_2;
+
+--exec cat $MYSQLTEST_VARDIR/master-data/test/bug22080_3.CSV
+check table bug22080_3;
+
+drop tables bug22080_1,bug22080_2,bug22080_3;
diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc
index 8f090470f49c18c367cc6bd6fdc3d0a7d17d2013..c5c3ff11edc5f062676fd3d1dd195e745f0dd8d9 100644
--- a/storage/csv/ha_tina.cc
+++ b/storage/csv/ha_tina.cc
@@ -548,7 +548,10 @@ int ha_tina::encode_quote(byte *buf)
       in the code.
     */
     if ((*field)->is_null())
-      ptr= end_ptr= 0;
+    {
+      buffer.append(STRING_WITH_LEN("\"\","));
+      continue;
+    }
     else
     {
       (*field)->val_str(&attribute,&attribute);
@@ -649,6 +652,7 @@ int ha_tina::find_current_row(byte *buf)
   off_t end_offset, curr_offset= current_position;
   int eoln_len;
   my_bitmap_map *org_bitmap;
+  int error;
   DBUG_ENTER("ha_tina::find_current_row");
 
   /*
@@ -662,23 +666,23 @@ int ha_tina::find_current_row(byte *buf)
 
   /* Avoid asserts in ::store() for columns that are not going to be updated */
   org_bitmap= dbug_tmp_use_all_columns(table, table->write_set);
+  error= HA_ERR_CRASHED_ON_USAGE;
+
+  memset(buf, 0, table->s->null_bytes);
 
   for (Field **field=table->field ; *field ; field++)
   {
     buffer.length(0);
-    if (file_buff->get_value(curr_offset) == '"')
+    if (curr_offset < end_offset &&
+        file_buff->get_value(curr_offset) == '"')
       curr_offset++; // Incrementpast the first quote
     else
-    {
-      dbug_tmp_restore_column_map(table->write_set, org_bitmap);
-      DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
-    }
-    for(;curr_offset != end_offset; curr_offset++)
+      goto err;
+    for(;curr_offset < end_offset; curr_offset++)
     {
       // Need to convert line feeds!
       if (file_buff->get_value(curr_offset) == '"' &&
-          (((file_buff->get_value(curr_offset + 1) == ',') &&
-            (file_buff->get_value(curr_offset + 2) == '"')) ||
+          ((file_buff->get_value(curr_offset + 1) == ',') ||
            (curr_offset == end_offset -1 )))
       {
         curr_offset+= 2; // Move past the , and the "
@@ -708,10 +712,7 @@ int ha_tina::find_current_row(byte *buf)
           we are working with a damaged file.
         */
         if (curr_offset == end_offset - 1)
-        {
-          dbug_tmp_restore_column_map(table->write_set, org_bitmap);
-          DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
-        }
+          goto err;
         buffer.append(file_buff->get_value(curr_offset));
       }
     }
@@ -719,11 +720,12 @@ int ha_tina::find_current_row(byte *buf)
       (*field)->store(buffer.ptr(), buffer.length(), system_charset_info);
   }
   next_position= end_offset + eoln_len;
-  /* Maybe use \N for null? */
-  memset(buf, 0, table->s->null_bytes); /* We do not implement nulls! */
+  error= 0;
+
+err:
   dbug_tmp_restore_column_map(table->write_set, org_bitmap);
 
-  DBUG_RETURN(0);
+  DBUG_RETURN(error);
 }
 
 /*