From 8ff9a03df3b93076d9c0b477569540cef241bc05 Mon Sep 17 00:00:00 2001 From: ieQu1 <99872536+ieQu1@users.noreply.github.com> Date: Thu, 9 Jun 2022 13:46:56 +0200 Subject: [PATCH] fix(retainer): Handle zero-length topic levels --- apps/emqx_retainer/src/emqx_retainer_index.erl | 4 ++-- apps/emqx_retainer/test/emqx_retainer_index_SUITE.erl | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/emqx_retainer/src/emqx_retainer_index.erl b/apps/emqx_retainer/src/emqx_retainer_index.erl index 0d739e2b0..3f5b87b90 100644 --- a/apps/emqx_retainer/src/emqx_retainer_index.erl +++ b/apps/emqx_retainer/src/emqx_retainer_index.erl @@ -176,11 +176,11 @@ condition([NIndex | OtherIndex], ['+' | OtherTokens], N, IndexMatch, OtherMatch) condition(Index, ['+' | OtherTokens], N, IndexMatch, OtherMatch) -> condition(Index, OtherTokens, N + 1, IndexMatch, ['_' | OtherMatch]); condition([NIndex | OtherIndex], [Token | OtherTokens], N, IndexMatch, OtherMatch) when - NIndex =:= N, is_binary(Token) + NIndex =:= N, is_binary(Token) orelse Token =:= '' -> condition(OtherIndex, OtherTokens, N + 1, [Token | IndexMatch], OtherMatch); condition(Index, [Token | OtherTokens], N, IndexMatch, OtherMatch) when - is_binary(Token) + is_binary(Token) orelse Token =:= '' -> condition(Index, OtherTokens, N + 1, IndexMatch, [Token | OtherMatch]). diff --git a/apps/emqx_retainer/test/emqx_retainer_index_SUITE.erl b/apps/emqx_retainer/test/emqx_retainer_index_SUITE.erl index ce37f2788..793df0410 100644 --- a/apps/emqx_retainer/test/emqx_retainer_index_SUITE.erl +++ b/apps/emqx_retainer/test/emqx_retainer_index_SUITE.erl @@ -193,6 +193,14 @@ t_condition_index(_Config) -> [1], [<<"a">>, '#'] ) + ), + + ?assertEqual( + {[1, 2, 3], {['', <<"saya">>, '_'], []}}, + emqx_retainer_index:condition( + [1, 2, 3], + ['', <<"saya">>, '+'] + ) ). t_restore_topic(_Config) ->