Skip to content

Commit 667eeaf

Browse files
committed
Merge pull request #626 from HeartSaVioR/fix-pipeline-throws-npe-without-multi
Fix Pipeline throws NPE using exec without multi (fixes #623)
2 parents 1fba7de + bbc9078 commit 667eeaf

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/main/java/redis/clients/jedis/Pipeline.java

+9
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,18 @@ public List<Object> syncAndReturnAll() {
104104
}
105105

106106
public Response<String> discard() {
107+
if (currentMulti == null)
108+
throw new JedisDataException("DISCARD without MULTI");
109+
107110
client.discard();
108111
currentMulti = null;
109112
return getResponse(BuilderFactory.STRING);
110113
}
111114

112115
public Response<List<Object>> exec() {
116+
if (currentMulti == null)
117+
throw new JedisDataException("EXEC without MULTI");
118+
113119
client.exec();
114120
Response<List<Object>> response = super.getResponse(currentMulti);
115121
currentMulti.setResponseDependency(response);
@@ -118,6 +124,9 @@ public Response<List<Object>> exec() {
118124
}
119125

120126
public Response<String> multi() {
127+
if (currentMulti != null)
128+
throw new JedisDataException("MULTI calls can not be nested");
129+
121130
client.multi();
122131
Response<String> response = getResponse(BuilderFactory.STRING); // Expecting
123132
// OK

src/test/java/redis/clients/jedis/tests/PipeliningTest.java

+20
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,26 @@ public void multiWithSync() {
272272
assertEquals("world", r3.get());
273273
}
274274

275+
@Test(expected = JedisDataException.class)
276+
public void pipelineExecShoudThrowJedisDataExceptionWhenNotInMulti() {
277+
Pipeline pipeline = jedis.pipelined();
278+
pipeline.exec();
279+
}
280+
281+
@Test(expected = JedisDataException.class)
282+
public void pipelineDiscardShoudThrowJedisDataExceptionWhenNotInMulti() {
283+
Pipeline pipeline = jedis.pipelined();
284+
pipeline.discard();
285+
}
286+
287+
@Test(expected = JedisDataException.class)
288+
public void pipelineMultiShoudThrowJedisDataExceptionWhenAlreadyInMulti() {
289+
Pipeline pipeline = jedis.pipelined();
290+
pipeline.multi();
291+
pipeline.set("foo", "3");
292+
pipeline.multi();
293+
}
294+
275295
@Test
276296
public void testDiscardInPipeline() {
277297
Pipeline pipeline = jedis.pipelined();

0 commit comments

Comments
 (0)