Bug #45413 Field_blob::unpack ignores "to" parameter
| Submitted: | 9 Jun 2009 20:05 | Modified: | 7 Oct 2010 19:33 |
|---|---|---|---|
| Reporter: | Zardosht Kasheff (OCA) | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 5.1.30, 5.1 bzr | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | Contribution, field, field_blob, unpack | ||
[11 Jun 2009 16:55]
Zardosht Kasheff
Apparently the patch I did above is not sufficient. Field_blob::store still will not pack the data to the right location
[16 Jun 2009 7:33]
Sveta Smirnova
Thank you for the report. Verified as described.
[18 Jun 2009 23:21]
Omer Barnir
This is a minor internal code doc issue that has no affect on actual server operations
[7 Oct 2010 19:32]
Sveta Smirnova
See also bug #51343
[8 Oct 2010 7:54]
Georgi Kodinov
Bug #51343 made a duplicate of this one.
[17 Mar 2023 11:39]
srinivas kota
parameter is not valid bug is there mysqlworkbench is not working
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.042 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: Field_blob::unpack does not unpack to the parameter "to". Instead, it unpacks to whatever is pointed to in the member variable "ptr". Just as Field_blob::pack temporarily saves ptr to pack from the "from" variable, Field_blob::unpack should temporarily save ptr to unpack to the "to" variable. How to repeat: written above Suggested fix: Pattern-matching off of Field_blob::pack, temporarily save ptr and make sure to unpack to "to" (I hope this formats correctly): --- field.cc +++ field.cc @@ -8194,6 +8194,8 @@ DBUG_PRINT("enter", ("to: 0x%lx; from: 0x%lx;" " param_data: %u; low_byte_first: %d", (ulong) to, (ulong) from, param_data, low_byte_first)); + uchar *save= ptr; + ptr= (uchar*) to; uint const master_packlength= param_data > 0 ? param_data & 0xFF : packlength; uint32 const length= get_length(from, master_packlength, low_byte_first); @@ -8201,6 +8203,7 @@ bitmap_set_bit(table->write_set, field_index); store(reinterpret_cast<const char*>(from) + master_packlength, length, field_charset); + ptr=save; // Restore org row pointer DBUG_DUMP("record", to, table->s->reclength); DBUG_RETURN(from + master_packlength + length); }