--- lbbs/src/article_view_log.c 2025/10/14 13:28:28 1.11 +++ lbbs/src/article_view_log.c 2025/10/15 03:10:47 1.14 @@ -185,6 +185,7 @@ int article_view_log_merge_inc(ARTICLE_V int32_t *aid_new; int aid_new_cnt; int i, j, k; + int len; if (p_view_log == NULL) { @@ -225,10 +226,20 @@ int article_view_log_merge_inc(ARTICLE_V } } - memcpy(aid_new + k, p_view_log->aid_base + i, sizeof(int32_t) * (size_t)(p_view_log->aid_base_cnt - i)); - k += (p_view_log->aid_base_cnt - i); - memcpy(aid_new + k, p_view_log->aid_inc + j, sizeof(int32_t) * (size_t)(p_view_log->aid_inc_cnt - j)); - k += (p_view_log->aid_inc_cnt - j); + len = p_view_log->aid_base_cnt - i; + if (len > 0) + { + memcpy(aid_new + k, p_view_log->aid_base + i, + sizeof(int32_t) * (size_t)len); + k += len; + } + len = p_view_log->aid_inc_cnt - j; + if (len > 0) + { + memcpy(aid_new + k, p_view_log->aid_inc + j, + sizeof(int32_t) * (size_t)len); + k += len; + } free(p_view_log->aid_base); p_view_log->aid_base = aid_new; @@ -360,12 +371,12 @@ int article_view_log_set_viewed(int32_t right = left + 1; } - // for (i = p_view_log->aid_inc_cnt - 1; i >= right; i--) - // { - // p_view_log->aid_inc[i + 1] = p_view_log->aid_inc[i]; - // } - memmove(p_view_log->aid_inc + right + 1, p_view_log->aid_inc + right, - sizeof(int32_t) * (size_t)(p_view_log->aid_inc_cnt - right)); + if (p_view_log->aid_inc_cnt > right) + { + memmove(p_view_log->aid_inc + right + 1, + p_view_log->aid_inc + right, + sizeof(int32_t) * (size_t)(p_view_log->aid_inc_cnt - right)); + } p_view_log->aid_inc[right] = aid; (p_view_log->aid_inc_cnt)++;