Skip to content

Commit 6e998ba

Browse files
tishunggivo
andauthored
ACL DELUSER does not work correctly with UTF-8 Japanese characters #3178 (#3179) (#3188)
* Parse strings as UTF-8 * Chores : Reduce stale issues time, fix benchmark code, remove debug messages for testcontainers * Change method name * Update src/test/java/io/lettuce/core/commands/AclCommandIntegrationTests.java * Remove unneeded imports --------- Co-authored-by: ggivo <[email protected]>
1 parent f0de8f4 commit 6e998ba

33 files changed

+45
-50
lines changed

.github/workflows/stale-issues.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ jobs:
1717
repo-token: ${{ secrets.GITHUB_TOKEN }}
1818
stale-issue-message: 'If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 30 days this issue will be closed.'
1919
stale-pr-message: 'Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.'
20-
days-before-stale: 365
21-
days-before-close: 30
20+
days-before-stale: 30
21+
days-before-close: 14
2222
stale-issue-label: "status: feedback-reminder"
2323
stale-pr-label: "status: feedback-reminder"
2424
operations-per-run: 10

src/main/java/io/lettuce/core/output/ClaimedMessagesOutput.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,12 @@ public ClaimedMessagesOutput(RedisCodec<K, V> codec, K stream, boolean justId) {
7070
@Override
7171
public void set(ByteBuffer bytes) {
7272
if (startId == null) {
73-
startId = decodeAscii(bytes);
73+
startId = decodeString(bytes);
7474
return;
7575
}
7676

7777
if (id == null) {
78-
id = decodeAscii(bytes);
78+
id = decodeString(bytes);
7979
return;
8080
}
8181

src/main/java/io/lettuce/core/output/CommandOutput.java

+4-11
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package io.lettuce.core.output;
2121

2222
import java.nio.ByteBuffer;
23+
import java.nio.charset.StandardCharsets;
2324

2425
import io.lettuce.core.codec.RedisCodec;
2526
import io.lettuce.core.internal.LettuceAssert;
@@ -139,7 +140,7 @@ public void set(boolean value) {
139140
* @param error Error message.
140141
*/
141142
public void setError(ByteBuffer error) {
142-
this.error = decodeAscii(error);
143+
this.error = decodeString(error);
143144
}
144145

145146
/**
@@ -179,16 +180,8 @@ public void complete(int depth) {
179180
// nothing to do by default
180181
}
181182

182-
protected String decodeAscii(ByteBuffer bytes) {
183-
if (bytes == null) {
184-
return null;
185-
}
186-
187-
char[] chars = new char[bytes.remaining()];
188-
for (int i = 0; i < chars.length; i++) {
189-
chars[i] = (char) bytes.get();
190-
}
191-
return new String(chars);
183+
protected String decodeString(ByteBuffer bytes) {
184+
return bytes == null ? null : StandardCharsets.UTF_8.decode(bytes).toString();
192185
}
193186

194187
@Override

src/main/java/io/lettuce/core/output/DoubleListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public DoubleListOutput(RedisCodec<K, V> codec) {
4646

4747
@Override
4848
public void set(ByteBuffer bytes) {
49-
output.add(bytes != null ? parseDouble(decodeAscii(bytes)) : null);
49+
output.add(bytes != null ? parseDouble(decodeString(bytes)) : null);
5050
}
5151

5252
@Override

src/main/java/io/lettuce/core/output/DoubleOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public DoubleOutput(RedisCodec<K, V> codec) {
4040

4141
@Override
4242
public void set(ByteBuffer bytes) {
43-
output = (bytes == null) ? null : parseDouble(decodeAscii(bytes));
43+
output = (bytes == null) ? null : parseDouble(decodeString(bytes));
4444
}
4545

4646
@Override

src/main/java/io/lettuce/core/output/EnumSetOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void set(ByteBuffer bytes) {
5151
return;
5252
}
5353

54-
E enumConstant = resolve(enumValuePreprocessor.apply(decodeAscii(bytes)));
54+
E enumConstant = resolve(enumValuePreprocessor.apply(decodeString(bytes)));
5555

5656
if (enumConstant == null) {
5757
return;

src/main/java/io/lettuce/core/output/GeoCoordinatesListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void set(ByteBuffer bytes) {
3939
return;
4040
}
4141

42-
double value = (bytes == null) ? 0 : parseDouble(decodeAscii(bytes));
42+
double value = (bytes == null) ? 0 : parseDouble(decodeString(bytes));
4343
set(value);
4444
}
4545

src/main/java/io/lettuce/core/output/GeoCoordinatesValueListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void set(ByteBuffer bytes) {
4040
return;
4141
}
4242

43-
double value = parseDouble(decodeAscii(bytes));
43+
double value = parseDouble(decodeString(bytes));
4444
set(value);
4545
}
4646

src/main/java/io/lettuce/core/output/GeoWithinListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void set(ByteBuffer bytes) {
7373
return;
7474
}
7575

76-
double value = (bytes == null) ? 0 : parseDouble(decodeAscii(bytes));
76+
double value = (bytes == null) ? 0 : parseDouble(decodeString(bytes));
7777
set(value);
7878
}
7979

src/main/java/io/lettuce/core/output/JsonTypeListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void set(ByteBuffer bytes) {
3535
multi(1);
3636
}
3737

38-
output.add(JsonType.fromString(decodeAscii(bytes)));
38+
output.add(JsonType.fromString(decodeString(bytes)));
3939
}
4040

4141
@Override

src/main/java/io/lettuce/core/output/KeyValueListScoredValueOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void set(ByteBuffer bytes) {
4545
value = codec.decodeValue(bytes);
4646
return;
4747
}
48-
score = parseDouble(decodeAscii(bytes));
48+
score = parseDouble(decodeString(bytes));
4949
}
5050
}
5151

src/main/java/io/lettuce/core/output/KeyValueOfScoredValueOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void set(ByteBuffer bytes) {
4040
return;
4141
}
4242

43-
output = KeyValue.just(key, ScoredValue.just(parseDouble(decodeAscii(bytes)), value));
43+
output = KeyValue.just(key, ScoredValue.just(parseDouble(decodeString(bytes)), value));
4444
}
4545
}
4646

src/main/java/io/lettuce/core/output/KeyValueScoredValueOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public void set(ByteBuffer bytes) {
4848
return;
4949
}
5050

51-
double score = LettuceStrings.toDouble(decodeAscii(bytes));
51+
double score = LettuceStrings.toDouble(decodeString(bytes));
5252

5353
set(score);
5454
}

src/main/java/io/lettuce/core/output/MultiOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public void setError(ByteBuffer error) {
133133
}
134134

135135
CommandOutput<K, V, ?> output = queue.isEmpty() ? this : queue.peek().getOutput();
136-
output.setError(decodeAscii(error));
136+
output.setError(decodeString(error));
137137
}
138138

139139
@Override

src/main/java/io/lettuce/core/output/NumberListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public void multi(int count) {
6565
private Number parseNumber(ByteBuffer bytes) {
6666
Number result = 0;
6767
try {
68-
result = NumberFormat.getNumberInstance().parse(decodeAscii(bytes));
68+
result = NumberFormat.getNumberInstance().parse(decodeString(bytes));
6969
} catch (ParseException e) {
7070
LOG.warn("Failed to parse " + bytes, e);
7171
}

src/main/java/io/lettuce/core/output/PendingMessageListOutput.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public PendingMessageListOutput(RedisCodec<K, V> codec) {
4141
public void set(ByteBuffer bytes) {
4242

4343
if (messageId == null) {
44-
messageId = decodeAscii(bytes);
44+
messageId = decodeString(bytes);
4545
return;
4646
}
4747

@@ -51,7 +51,7 @@ public void set(ByteBuffer bytes) {
5151
return;
5252
}
5353

54-
set(Long.parseLong(decodeAscii(bytes)));
54+
set(Long.parseLong(decodeString(bytes)));
5555
}
5656

5757
@Override

src/main/java/io/lettuce/core/output/PendingMessagesOutput.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ public PendingMessagesOutput(RedisCodec<K, V> codec) {
3939
public void set(ByteBuffer bytes) {
4040

4141
if (messageIdsFrom == null) {
42-
messageIdsFrom = decodeAscii(bytes);
42+
messageIdsFrom = decodeString(bytes);
4343
return;
4444
}
4545

4646
if (messageIdsTo == null) {
47-
messageIdsTo = decodeAscii(bytes);
47+
messageIdsTo = decodeString(bytes);
4848
return;
4949
}
5050

@@ -54,7 +54,7 @@ public void set(ByteBuffer bytes) {
5454
return;
5555
}
5656

57-
set(Long.parseLong(decodeAscii(bytes)));
57+
set(Long.parseLong(decodeString(bytes)));
5858
}
5959

6060
@Override

src/main/java/io/lettuce/core/output/ScanOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public ScanOutput(RedisCodec<K, V> codec, T cursor) {
2424
public void set(ByteBuffer bytes) {
2525

2626
if (output.getCursor() == null) {
27-
output.setCursor(decodeAscii(bytes));
27+
output.setCursor(decodeString(bytes));
2828
if (LettuceStrings.isNotEmpty(output.getCursor()) && "0".equals(output.getCursor())) {
2929
output.setFinished(true);
3030
}

src/main/java/io/lettuce/core/output/ScoredValueListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public void set(ByteBuffer bytes) {
6060
return;
6161
}
6262

63-
double score = LettuceStrings.toDouble(decodeAscii(bytes));
63+
double score = LettuceStrings.toDouble(decodeString(bytes));
6464
set(score);
6565
}
6666

src/main/java/io/lettuce/core/output/ScoredValueOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void set(ByteBuffer bytes) {
3737
return;
3838
}
3939

40-
double score = LettuceStrings.toDouble(decodeAscii(bytes));
40+
double score = LettuceStrings.toDouble(decodeString(bytes));
4141
set(score);
4242
}
4343

src/main/java/io/lettuce/core/output/ScoredValueScanOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ protected void setOutput(ByteBuffer bytes) {
3333
return;
3434
}
3535

36-
double score = LettuceStrings.toDouble(decodeAscii(bytes));
36+
double score = LettuceStrings.toDouble(decodeString(bytes));
3737
set(score);
3838
}
3939

src/main/java/io/lettuce/core/output/ScoredValueScanStreamingOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ protected void setOutput(ByteBuffer bytes) {
3535
return;
3636
}
3737

38-
double score = LettuceStrings.toDouble(decodeAscii(bytes));
38+
double score = LettuceStrings.toDouble(decodeString(bytes));
3939
set(score);
4040
}
4141

src/main/java/io/lettuce/core/output/ScoredValueStreamingOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void set(ByteBuffer bytes) {
3535
return;
3636
}
3737

38-
double score = LettuceStrings.toDouble(decodeAscii(bytes));
38+
double score = LettuceStrings.toDouble(decodeString(bytes));
3939
set(score);
4040
}
4141

src/main/java/io/lettuce/core/output/SocketAddressOutput.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ public SocketAddressOutput(RedisCodec<K, V> codec) {
2626
public void set(ByteBuffer bytes) {
2727

2828
if (!hasHostname) {
29-
hostname = decodeAscii(bytes);
29+
hostname = decodeString(bytes);
3030
hasHostname = true;
3131
return;
3232
}
3333

34-
int port = Integer.parseInt(decodeAscii(bytes));
34+
int port = Integer.parseInt(decodeString(bytes));
3535
output = InetSocketAddress.createUnresolved(hostname, port);
3636
}
3737

src/main/java/io/lettuce/core/output/StatusOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public StatusOutput(RedisCodec<K, V> codec) {
4141

4242
@Override
4343
public void set(ByteBuffer bytes) {
44-
output = OK.equals(bytes) ? "OK" : decodeAscii(bytes);
44+
output = OK.equals(bytes) ? "OK" : decodeString(bytes);
4545
}
4646

4747
}

src/main/java/io/lettuce/core/output/StreamMessageListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public StreamMessageListOutput(RedisCodec<K, V> codec, K stream) {
4141
public void set(ByteBuffer bytes) {
4242

4343
if (id == null) {
44-
id = decodeAscii(bytes);
44+
id = decodeString(bytes);
4545
return;
4646
}
4747

src/main/java/io/lettuce/core/output/StreamReadOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void set(ByteBuffer bytes) {
5252
}
5353

5454
if (id == null) {
55-
id = decodeAscii(bytes);
55+
id = decodeString(bytes);
5656
return;
5757
}
5858

src/main/java/io/lettuce/core/output/StringListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public void set(ByteBuffer bytes) {
3232
multi(1);
3333
}
3434

35-
subscriber.onNext(output, bytes == null ? null : decodeAscii(bytes));
35+
subscriber.onNext(output, bytes == null ? null : decodeString(bytes));
3636
}
3737

3838
@Override

src/main/java/io/lettuce/core/output/StringValueListOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public StringValueListOutput(RedisCodec<K, V> codec) {
3030

3131
@Override
3232
public void set(ByteBuffer bytes) {
33-
subscriber.onNext(output, bytes == null ? Value.empty() : Value.fromNullable(decodeAscii(bytes)));
33+
subscriber.onNext(output, bytes == null ? Value.empty() : Value.fromNullable(decodeString(bytes)));
3434
}
3535

3636
@Override

src/main/java/io/lettuce/core/pubsub/PubSubOutput.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void set(ByteBuffer bytes) {
9393
}
9494

9595
if (type == null) {
96-
type = Type.valueOf(decodeAscii(bytes));
96+
type = Type.valueOf(decodeString(bytes));
9797
return;
9898
}
9999

src/test/java/io/lettuce/core/commands/AclCommandIntegrationTests.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ void aclLog() {
131131

132132
@Test
133133
void aclList() {
134-
assertThat(redis.aclList()).hasSize(2).first().asString().contains("user default");
134+
assertThat(redis.aclList()).hasSize(1).first().asString().contains("user default");
135135
}
136136

137137
@Test
@@ -161,7 +161,7 @@ void aclSetuserWithCategories() {
161161

162162
@Test
163163
void aclUsers() {
164-
assertThat(redis.aclUsers()).hasSize(2).first().isEqualTo("default");
164+
assertThat(redis.aclUsers()).hasSize(1).first().isEqualTo("default");
165165
}
166166

167167
@Test

src/test/jmh/io/lettuce/core/dynamic/RedisCommandFactoryBenchmark.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public void setup() {
3232
redisCommandFactory = new RedisCommandFactory(new MockStatefulConnection(EmptyRedisChannelWriter.INSTANCE));
3333
regularCommands = redisCommandFactory.getCommands(RegularCommands.class);
3434

35-
asyncCommands = new RedisAsyncCommandsImpl<>(EmptyStatefulRedisConnection.INSTANCE, StringCodec.UTF8, Mono.just(new DefaultJsonParser()));
35+
asyncCommands = new RedisAsyncCommandsImpl<>(EmptyStatefulRedisConnection.INSTANCE, StringCodec.UTF8);
3636
}
3737

3838
@Benchmark

src/test/resources/log4j2-test.xml

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212

1313
<Loggers>
1414
<Logger name="io.lettuce.core.protocol" level="FATAL"/>
15-
<!-- Remove the line below after we stabilize the test-containers deployment -->
15+
<!-- Uncomment the line below to enable test-containers debug logging -->
16+
<!--
1617
<Logger name="org.testcontainers" level="DEBUG"/>
18+
-->
1719
<Root level="FATAL">
1820
<AppenderRef ref="Console"/>
1921
<AppenderRef ref="File"/>

0 commit comments

Comments
 (0)