From 3bfcd69fd9a667a412345ea17a8e5485a120579e Mon Sep 17 00:00:00 2001 From: eswick Date: Sun, 22 Jun 2014 14:13:45 -0400 Subject: [PATCH] Convert region ID to lowercase when saving polygon points to MySQL database. Check number of points in polygonal region before registering it. When saving the points of a polygonal region to a MySQL database, the region ID was not converted to lowercase. If a region ID contained a capital letter, upon reload no points would be found, causing an out-of-bounds exception and essentially leaving WorldGuard unuseable. --- .../worldguard/protection/databases/MySQLDatabase.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sk89q/worldguard/protection/databases/MySQLDatabase.java b/src/main/java/com/sk89q/worldguard/protection/databases/MySQLDatabase.java index 57cd1451..79e65726 100755 --- a/src/main/java/com/sk89q/worldguard/protection/databases/MySQLDatabase.java +++ b/src/main/java/com/sk89q/worldguard/protection/databases/MySQLDatabase.java @@ -433,6 +433,12 @@ private void loadPoly2d() { poly2dVectorResultSet.getInt("z") )); } + + if (points.size() < 3) { + logger.warning(String.format("Invalid polygonal region '%s': region only has %d point(s). Ignoring.", id, points.size())); + continue; + } + ProtectedRegion region = new ProtectedPolygonalRegion(id, points, minY, maxY); region.setPriority(poly2dResultSet.getInt("priority")); @@ -932,7 +938,7 @@ private void updatePoly2dPoints(ProtectedPolygonalRegion region) throws SQLExcep ") VALUES (null, ?, " + this.worldDbId + ", ?, ?)" ); - String lowerId = region.getId(); + String lowerId = region.getId().toLowerCase(); for (BlockVector2D point : region.getPoints()) { insertPoly2dPointStatement.setString(1, lowerId); insertPoly2dPointStatement.setInt(2, point.getBlockZ());