Commit ebe0c226 authored by Ramil Kalimullin's avatar Ramil Kalimullin
Browse files

Fix for bug #34779: crash in checksum table on federated tables

with blobs containing nulls

Problem: FEDERATED SE improperly stores NULL fields in the record buffer.

Fix: store them properly.
parent 1c42e93f
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2071,7 +2071,18 @@ DROP TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://';
DROP TABLE t1;
CREATE TABLE t1 (a LONGBLOB, b LONGBLOB);
INSERT INTO t1 VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaa', NULL);
CREATE TABLE t1
(a LONGBLOB, b LONGBLOB) ENGINE=FEDERATED
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
CHECKSUM TABLE t1;
Table	Checksum
test.t1	2465757603
DROP TABLE t1;
DROP TABLE t1;
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
End of 5.0 tests
+22 −0
Original line number Diff line number Diff line
@@ -1750,4 +1750,26 @@ DROP TABLE t1;
CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://';
DROP TABLE t1;


#
# Bug #34779: crash in checksum table on federated tables with blobs 
# containing nulls
#
connection slave;
CREATE TABLE t1 (a LONGBLOB, b LONGBLOB);
INSERT INTO t1 VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaa', NULL);
connection master;
--replace_result $SLAVE_MYPORT SLAVE_PORT
eval CREATE TABLE t1
  (a LONGBLOB, b LONGBLOB) ENGINE=FEDERATED
  CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/t1';
CHECKSUM TABLE t1;
connection slave;
DROP TABLE t1;
connection master;
DROP TABLE t1;


source include/federated_cleanup.inc;

--echo End of 5.0 tests
+3 −0
Original line number Diff line number Diff line
@@ -731,7 +731,10 @@ uint ha_federated::convert_row_to_internal_format(byte *record,
    old_ptr= (my_ptrdiff_t) (record - table->record[0]);
    (*field)->move_field(old_ptr);
    if (!row[x])
    {
      (*field)->set_null();
      (*field)->reset();
    }
    else
    {
      (*field)->set_notnull();