[MDEV-27924] page_zip_copy_recs() corrupts ROW_FORMAT=COMPRESSED block descriptor Created: 2022-02-23 Updated: 2022-02-23 Resolved: 2022-02-23 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - InnoDB |
| Affects Version/s: | 10.6.6, 10.7.2, 10.8.1, 10.6.7, 10.7.3, 10.8.2 |
| Fix Version/s: | 10.6.8, 10.7.4, 10.8.3 |
| Type: | Bug | Priority: | Blocker |
| Reporter: | Marko Mäkelä | Assignee: | Marko Mäkelä |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | corruption, crash, regression-10.6 | ||
| Issue Links: |
|
||||||||
| Description |
|
A number of innodb_zip tests crash if the preprocessor symbol UNIV_ZIP_COPY is defined. (There currently is no cmake option for enabling that.)
The cause is that page_zip_copy_recs() is invoking the default copy constructor of page_zip_des_t, which will also overwrite the fix data member, which we only stored in the page_zip_des_t object to avoid alignment loss. The following fixes this block descriptor corruption that affects ROW_FORMAT=COMPRESSED pages in the event of a rather rare compression overflow:
With this patch (and UNIV_ZIP_COPY), only 2 tests fail with an expected result difference (
|