Skip to content
  • Debarun Banerjee's avatar
    b5693244
    BUG#20597821 INVALID READ OF BLOB MEMORY FREED IN ::CLEAR_BLOB_HEAP_PART · b5693244
    Debarun Banerjee authored
    
    
    Problem :
    ---------
    In ha_innopart::rnd_next_in_part() and in other partition fetch calls we
    are freeing the current blob heap for the partition before doing record
    fetch. It looks like SQL is referring to this BLOB heap in case there
    is no data to fetch and so freeing it early causes the issue in
    correlated sub query execution. The issues is introduced from
    [hash:eb16156bf16388153a27e776439dee38a18b2a4b] as part of the bug-fix
    [bug-20582149 - INVALID READ OF SIZE 1 IN PROTOCOL::NET_STORE_DATA].
    
    Solution :
    ----------
    It is good to keep the part consistent between partitioned and
    non-partitioned table. The original fix doesn't need to free the blob
    heap before doing fetch.
    
    1. clear_blob_heap_part() - Removed function and calls from next and
       prev for index and sequential scan.
    
    2. For table scan and unordered scan use only one blob_heap.
    
    3. ha_innopart::rnd_end_in_part() - Remove unconditional reset of
       blob_heap to NULL.
    
    Reviewed-by: default avatarMattias Jonsson <mattias.jonsson@oracle.com>
    
    RB: 8215
    b5693244
    BUG#20597821 INVALID READ OF BLOB MEMORY FREED IN ::CLEAR_BLOB_HEAP_PART
    Debarun Banerjee authored
    
    
    Problem :
    ---------
    In ha_innopart::rnd_next_in_part() and in other partition fetch calls we
    are freeing the current blob heap for the partition before doing record
    fetch. It looks like SQL is referring to this BLOB heap in case there
    is no data to fetch and so freeing it early causes the issue in
    correlated sub query execution. The issues is introduced from
    [hash:eb16156bf16388153a27e776439dee38a18b2a4b] as part of the bug-fix
    [bug-20582149 - INVALID READ OF SIZE 1 IN PROTOCOL::NET_STORE_DATA].
    
    Solution :
    ----------
    It is good to keep the part consistent between partitioned and
    non-partitioned table. The original fix doesn't need to free the blob
    heap before doing fetch.
    
    1. clear_blob_heap_part() - Removed function and calls from next and
       prev for index and sequential scan.
    
    2. For table scan and unordered scan use only one blob_heap.
    
    3. ha_innopart::rnd_end_in_part() - Remove unconditional reset of
       blob_heap to NULL.
    
    Reviewed-by: default avatarMattias Jonsson <mattias.jonsson@oracle.com>
    
    RB: 8215
Loading