aboutsummaryrefslogtreecommitdiffhomepage
path: root/CraftBukkit-Patches/0154-Safer-JSON-Loading.patch
blob: 2975e32306197045927b28e262ed09df833bee4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
From 35a9d4a5f070fa0cc719d68c9a712819965e712b Mon Sep 17 00:00:00 2001
From: Suddenly <suddenly@suddenly.coffee>
Date: Tue, 8 Jul 2014 09:44:18 +1000
Subject: [PATCH] Safer JSON Loading


diff --git a/src/main/java/net/minecraft/server/JsonList.java b/src/main/java/net/minecraft/server/JsonList.java
index 9d1cb33..71ae29e 100644
--- a/src/main/java/net/minecraft/server/JsonList.java
+++ b/src/main/java/net/minecraft/server/JsonList.java
@@ -146,6 +146,17 @@ public class JsonList {
         try {
             bufferedreader = Files.newReader(this.c, Charsets.UTF_8);
             collection = (Collection) this.b.fromJson(bufferedreader, f);
+        // Spigot Start
+        } catch ( java.io.FileNotFoundException ex )
+        {
+            org.bukkit.Bukkit.getLogger().log( java.util.logging.Level.INFO, "Unable to find file {0}, creating it.", this.c );
+        } catch ( net.minecraft.util.com.google.gson.JsonSyntaxException ex )
+        {
+            org.bukkit.Bukkit.getLogger().log( java.util.logging.Level.WARNING, "Unable to read file {0}, backing it up to {0}.backup and creating new copy.", this.c );
+            File backup = new File( this.c + ".backup" );
+            this.c.renameTo( backup );
+            this.c.delete();
+        // Spigot End
         } finally {
             IOUtils.closeQuietly(bufferedreader);
         }
diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java
index 9f7de3f..fe42b9a 100644
--- a/src/main/java/net/minecraft/server/UserCache.java
+++ b/src/main/java/net/minecraft/server/UserCache.java
@@ -176,6 +176,11 @@ public class UserCache {
                 break label81;
             } catch (FileNotFoundException filenotfoundexception) {
                 ;
+            // Spigot Start
+            } catch (net.minecraft.util.com.google.gson.JsonSyntaxException ex) {
+                org.bukkit.Bukkit.getLogger().warning( "Usercache.json is corrupted or has bad formatting. Deleting it to prevent further issues.");
+                this.g.delete();
+            // Spigot End
             } finally {
                 IOUtils.closeQuietly(bufferedreader);
             }
-- 
1.9.1