diff --git a/src/share/ob_order_perserving_encoder.cpp b/src/share/ob_order_perserving_encoder.cpp index 44f6f08c25..6969da2450 100644 --- a/src/share/ob_order_perserving_encoder.cpp +++ b/src/share/ob_order_perserving_encoder.cpp @@ -848,8 +848,15 @@ int ObSortkeyConditioner::process_key_conditioning( if (ret != OB_BUF_NOT_ENOUGH) { LOG_WARN("failed to encode sortkey", K(ret)); } + } else if (max_buf_len < to_len) { + ret = OB_BUF_NOT_ENOUGH; + LOG_TRACE("no enough memory to do encoding for obnumber", K(ret)); } else if (!param.is_asc_) { - process_decrease(to + 1, to_len); + if (param.is_nullable_) { + process_decrease(to + 1, to_len - 1); + } else { + process_decrease(to, to_len); + } } return ret;