Skip to content

Commit fc7bffb

Browse files
tishunggivo
andauthored
ACL DELUSER does not work correctly with UTF-8 Japanese characters #3178 (#3179)
* 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 Co-authored-by: ggivo <[email protected]> * Remove unneeded imports --------- Co-authored-by: ggivo <[email protected]>
1 parent 0776653 commit fc7bffb

33 files changed

+45
-50
lines changed

Diff for: .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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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;

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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
}

Diff for: 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

Diff for: 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
}

Diff for: 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

Diff for: 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

Diff for: 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
}

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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
}

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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

Diff for: 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)