Rémi Bernon (@rbernon) commented about dlls/win32u/imm.c:
{ comp_len = wcslen( update->comp_str );
cursor_begin = LOWORD(update->cursor_pos);
cursor_end = HIWORD(update->cursor_pos);
if (cursor_begin > comp_len) cursor_begin = comp_len;
if (cursor_end > comp_len) cursor_end = comp_len;
if (cursor_end < cursor_begin) cursor_end = cursor_begin;
if (cursor_begin < 0 || cursor_end < 0) cursor_begin = cursor_end = -1; /* no cursor */
comp_clause_count = get_comp_clause_count( comp_len, cursor_begin, cursor_end );
needed += comp_len * sizeof(WCHAR); /* GCS_COMPSTR */ needed += comp_len; /* GCS_COMPATTR */
needed += 2 * sizeof(DWORD); /* GCS_COMPCLAUSE */
needed += comp_clause_count * sizeof(DWORD); /* GCS_COMPCLAUSE */
For simplification, would it be an issue to use 4 all the time and always set [0, cursor_begin, cursor_end, comp_len], regardless if some are equal?