LuckPerms

LuckPerms

41.4k Downloads

NullPointerException at ActionJsonSerializer.deserialize(ActionJsonSerializer.java:88)

electron93 opened this issue ยท 1 comments

commented

LuckPerms v5.0.12 The same error on all servers: sponge, paper, spigot (including waterfall/bungeecord).

From paper (1.14.4):

[22:30:00 WARN]: java.lang.NullPointerException
[22:30:00 WARN]:        at me.lucko.luckperms.common.actionlog.ActionJsonSerializer.deserialize(ActionJsonSerializer.java:88)
[22:30:00 WARN]:        at me.lucko.luckperms.common.messaging.message.ActionLogMessageImpl.decode(ActionLogMessageImpl.java:49)
[22:30:00 WARN]:        at me.lucko.luckperms.common.messaging.LuckPermsMessagingService.consumeIncomingMessageAsString(LuckPermsMessagingService.java:204)
[22:30:00 WARN]:        at me.lucko.luckperms.common.messaging.redis.RedisMessenger$Subscription.onMessage(RedisMessenger.java:106)
[22:30:00 WARN]:        at me.lucko.luckperms.lib.jedis.JedisPubSub.process(JedisPubSub.java:142)
[22:30:00 WARN]:        at me.lucko.luckperms.lib.jedis.JedisPubSub.proceed(JedisPubSub.java:115)
[22:30:00 WARN]:        at me.lucko.luckperms.lib.jedis.Jedis.subscribe(Jedis.java:2811)
[22:30:00 WARN]:        at me.lucko.luckperms.common.messaging.redis.RedisMessenger.lambda$init$0(RedisMessenger.java:72)
[22:30:00 WARN]:        at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
[22:30:00 WARN]:        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
[22:30:00 WARN]:        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
[22:30:00 WARN]:        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
[22:30:00 WARN]:        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

From Sponge (1.12.2):

[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]: java.lang.NullPointerException
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at me.lucko.luckperms.common.actionlog.ActionJsonSerializer.deserialize(ActionJsonSerializer.java:88)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at me.lucko.luckperms.common.messaging.message.ActionLogMessageImpl.decode(ActionLogMessageImpl.java:49)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at me.lucko.luckperms.common.messaging.LuckPermsMessagingService.consumeIncomingMessageAsString(LuckPermsMessagingService.java:204)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at me.lucko.luckperms.common.messaging.redis.RedisMessenger$Subscription.onMessage(RedisMessenger.java:106)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at me.lucko.luckperms.lib.jedis.JedisPubSub.process(JedisPubSub.java:142)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at me.lucko.luckperms.lib.jedis.JedisPubSub.proceed(JedisPubSub.java:115)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at me.lucko.luckperms.lib.jedis.Jedis.subscribe(Jedis.java:2811)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at me.lucko.luckperms.common.messaging.redis.RedisMessenger.lambda$init$0(RedisMessenger.java:72)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at org.spongepowered.api.scheduler.Task$Builder.lambda$execute$0(Task.java:139)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at org.spongepowered.common.scheduler.SchedulerBase.lambda$startTask$0(SchedulerBase.java:197)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[22:44:34] [pool-3-thread-1/INFO] [STDERR]: [me.lucko.luckperms.common.messaging.redis.RedisMessenger:lambda$init$0:74]:        at java.lang.Thread.run(Thread.java:748)

Redis messages:

1) "message"
2) "luckperms:update"
3) "{\"id\":\"dca7a1b0-68f2-405f-b185-3bc5ed47958e\",\"type\":\"log\",\"content\":{\"timestamp\":1575402405,\"source\":{\"uniqueId\":\"00000000-0000-0000-0000-000000000000\",\"name\":\"Console@test\"},\"target\":{\"type\":\"USER\"},\"uniqueId\":\"4557c846-caae-44ae-b6e1-b3113fe1d6e5\",\"name\":\"e1ectron\",\"description\":\"permission set luckperms.* true server=classic\"}}"
1) "message"
2) "luckperms:update"
3) "{\"id\":\"17f177b7-1cf5-475e-ac06-2bb99f6c416b\",\"type\":\"userupdate\",\"content\":{\"userUuid\":\"4557c846-caae-44ae-b6e1-b3113fe1d6e5\"}}"
commented

Found the problem here (lines 51 and 57):

https://github.com/lucko/LuckPerms/blob/a07f876c8593846a4989af9029ae0446b62d3874/common/src/main/java/me/lucko/luckperms/common/actionlog/ActionJsonSerializer.java#L50-L58

And the corrected code:

        .add("target", new JObject()
                .add("type", new JsonPrimitive(logEntry.getTarget().getType().name())) // -)
                .consume(obj -> {
                    if (logEntry.getTarget().getUniqueId().isPresent()) {
                        obj.add("uniqueId", new JsonPrimitive(logEntry.getTarget().getUniqueId().get().toString()));
                    }
                })
                .add("name", new JsonPrimitive(logEntry.getTarget().getName())) // +)
        )

Which produces the following JSON:

{
    "timestamp":1575410603,
    "source":{
        "uniqueId":"f941aa79-0cb8-47dd-89af-c514fb8eef52",
        "name":"Admin"
    },
    "target":{
        "type":"USER",
        "uniqueId":"6ab8f6f2-b76a-49b5-a78b-92f4eeded24d",
        "name":"Player"
    },
    "description":"desc"
}