From e3d63a872e6f6926f21bcd3bb71ee920b8b1de1f Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 00:29:52 -0500 Subject: [PATCH 01/17] attempt a sanity check --- src/resources/equipment/Equipment.java | 44 ++++++++++++++------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/resources/equipment/Equipment.java b/src/resources/equipment/Equipment.java index 4a1418ab..fa72eacd 100644 --- a/src/resources/equipment/Equipment.java +++ b/src/resources/equipment/Equipment.java @@ -68,28 +68,32 @@ public class Equipment extends Delta { TangibleObject object = (TangibleObject) getObject(); - synchronized(objectMutex) { - int size = 19 + object.getCustomization ().length; + if (object.getCustomization ().length > 0) { + synchronized(objectMutex) { + int size = 19 + object.getCustomization ().length; + + if (object instanceof WeaponObject) { + size += ((WeaponObject) object).getBaseline(3).getBaseline().array().length; + size += ((WeaponObject) object).getBaseline(6).getBaseline().array().length; + } - if (object instanceof WeaponObject) { - size += ((WeaponObject) object).getBaseline(3).getBaseline().array().length; - size += ((WeaponObject) object).getBaseline(6).getBaseline().array().length; + IoBuffer buffer = createBuffer(size); + buffer.putShort((short) object.getCustomization().length); + buffer.put(object.getCustomization()); + buffer.putInt(object.getArrangementId()); + buffer.putLong(object.getObjectID()); + buffer.putInt(CRC.StringtoCRC(object.getTemplate())); + buffer.put(getBoolean((object instanceof WeaponObject))); + if (object instanceof WeaponObject) { + buffer.put(((WeaponObject) object).getBaseline(3).getBaseline().array()); + buffer.put(((WeaponObject) object).getBaseline(6).getBaseline().array()); + } + buffer.flip(); + + return buffer.array(); } - - IoBuffer buffer = createBuffer(size); - buffer.putShort((short) object.getCustomization().length); - buffer.put(object.getCustomization()); - buffer.putInt(object.getArrangementId()); - buffer.putLong(object.getObjectID()); - buffer.putInt(CRC.StringtoCRC(object.getTemplate())); - buffer.put(getBoolean((object instanceof WeaponObject))); - if (object instanceof WeaponObject) { - buffer.put(((WeaponObject) object).getBaseline(3).getBaseline().array()); - buffer.put(((WeaponObject) object).getBaseline(6).getBaseline().array()); - } - buffer.flip(); - - return buffer.array(); + } else { + throw new IndexOutOfBoundsException(); //null or 0 index is out of bounds } } From 3c1480b891156ec9bbc7b61d08fb6f597b7b6134 Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 00:34:56 -0500 Subject: [PATCH 02/17] try this then --- src/resources/equipment/Equipment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/resources/equipment/Equipment.java b/src/resources/equipment/Equipment.java index fa72eacd..e1c3738f 100644 --- a/src/resources/equipment/Equipment.java +++ b/src/resources/equipment/Equipment.java @@ -93,8 +93,10 @@ public class Equipment extends Delta { return buffer.array(); } } else { - throw new IndexOutOfBoundsException(); //null or 0 index is out of bounds + System.err.println("Serious error: Equipment object is null in objectList."); } + + return null; } } From b44c1ab13bfce3ebedb5b8dbabcef86ccb95338a Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 00:37:03 -0500 Subject: [PATCH 03/17] fix my comparison --- src/resources/equipment/Equipment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/equipment/Equipment.java b/src/resources/equipment/Equipment.java index e1c3738f..2f3544c7 100644 --- a/src/resources/equipment/Equipment.java +++ b/src/resources/equipment/Equipment.java @@ -68,7 +68,7 @@ public class Equipment extends Delta { TangibleObject object = (TangibleObject) getObject(); - if (object.getCustomization ().length > 0) { + if (object.getCustomization().length == 0) { synchronized(objectMutex) { int size = 19 + object.getCustomization ().length; From 02a9581ccf60b31b274839e82febad42c82f1bd9 Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 00:42:16 -0500 Subject: [PATCH 04/17] attempt an equipment fix...may be able to remove the typecasting and just use object up top? --- src/resources/equipment/Equipment.java | 56 +++++++++++++------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/src/resources/equipment/Equipment.java b/src/resources/equipment/Equipment.java index 2f3544c7..0c6b16ac 100644 --- a/src/resources/equipment/Equipment.java +++ b/src/resources/equipment/Equipment.java @@ -58,45 +58,43 @@ public class Equipment extends Delta { } public byte[] getBytes() { - if (!(getObject() instanceof TangibleObject)) { - if (getObject() == null) { + SWGObject sobject = getObject(); + + if (!(sobject instanceof TangibleObject)) { + if (sobject == null) { System.err.println("Serious error: Equipment object is null in objectList."); } else { System.err.println("Serious error: Equipment object isn't a TangibleObject"); } + + return null; } - TangibleObject object = (TangibleObject) getObject(); + TangibleObject object = (TangibleObject) sobject; - if (object.getCustomization().length == 0) { - synchronized(objectMutex) { - int size = 19 + object.getCustomization ().length; - - if (object instanceof WeaponObject) { - size += ((WeaponObject) object).getBaseline(3).getBaseline().array().length; - size += ((WeaponObject) object).getBaseline(6).getBaseline().array().length; - } + synchronized(objectMutex) { + int size = 19 + object.getCustomization ().length; - IoBuffer buffer = createBuffer(size); - buffer.putShort((short) object.getCustomization().length); - buffer.put(object.getCustomization()); - buffer.putInt(object.getArrangementId()); - buffer.putLong(object.getObjectID()); - buffer.putInt(CRC.StringtoCRC(object.getTemplate())); - buffer.put(getBoolean((object instanceof WeaponObject))); - if (object instanceof WeaponObject) { - buffer.put(((WeaponObject) object).getBaseline(3).getBaseline().array()); - buffer.put(((WeaponObject) object).getBaseline(6).getBaseline().array()); - } - buffer.flip(); - - return buffer.array(); + if (object instanceof WeaponObject) { + size += ((WeaponObject) object).getBaseline(3).getBaseline().array().length; + size += ((WeaponObject) object).getBaseline(6).getBaseline().array().length; } - } else { - System.err.println("Serious error: Equipment object is null in objectList."); + + IoBuffer buffer = createBuffer(size); + buffer.putShort((short) object.getCustomization().length); + buffer.put(object.getCustomization()); + buffer.putInt(object.getArrangementId()); + buffer.putLong(object.getObjectID()); + buffer.putInt(CRC.StringtoCRC(object.getTemplate())); + buffer.put(getBoolean((object instanceof WeaponObject))); + if (object instanceof WeaponObject) { + buffer.put(((WeaponObject) object).getBaseline(3).getBaseline().array()); + buffer.put(((WeaponObject) object).getBaseline(6).getBaseline().array()); + } + buffer.flip(); + + return buffer.array(); } - - return null; } } From d8f47c62361b30779fd0b61360bf016a7695e378 Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 00:47:14 -0500 Subject: [PATCH 05/17] this seems more logical...it's returned as an SWGObject, how can it be anything else? --- src/resources/equipment/Equipment.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/resources/equipment/Equipment.java b/src/resources/equipment/Equipment.java index 0c6b16ac..7f6ac7df 100644 --- a/src/resources/equipment/Equipment.java +++ b/src/resources/equipment/Equipment.java @@ -60,13 +60,8 @@ public class Equipment extends Delta { public byte[] getBytes() { SWGObject sobject = getObject(); - if (!(sobject instanceof TangibleObject)) { - if (sobject == null) { - System.err.println("Serious error: Equipment object is null in objectList."); - } else { - System.err.println("Serious error: Equipment object isn't a TangibleObject"); - } - + if (sobject == null) { + System.err.println("Serious error: Equipment object is null in objectList."); return null; } From 572cb9c1288a257d4d6e3c29b6da5900c51463cb Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 01:00:12 -0500 Subject: [PATCH 06/17] fix something stupid --- src/services/object/ObjectService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 158c8f9a..d6e39144 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -575,7 +575,8 @@ public class ObjectService implements INetworkDispatch { if (objectList.containsKey(objectID)) { System.err.println("getObject(): object is null but objectList contains objectID key"); } else { -// System.err.println("getObject(): object is null"); + System.err.println("getObject(): object of id "+ objectID + "is null. Destroying object."); + destroyObject(object,0); } } From d2f81b7dc439b77b0ee8a06f79b7d8f7c33f64f3 Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 01:02:02 -0500 Subject: [PATCH 07/17] proper return val on null --- src/services/object/ObjectService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index d6e39144..18e83a17 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -576,7 +576,8 @@ public class ObjectService implements INetworkDispatch { System.err.println("getObject(): object is null but objectList contains objectID key"); } else { System.err.println("getObject(): object of id "+ objectID + "is null. Destroying object."); - destroyObject(object,0); + destroyObject(object,0); + return null; } } From 9fb4c11d291ceab5bc3f8ada4a11f5aa2b5a5ffc Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 01:07:23 -0500 Subject: [PATCH 08/17] debugging... --- src/services/object/ObjectService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 18e83a17..67b7e89f 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -575,9 +575,8 @@ public class ObjectService implements INetworkDispatch { if (objectList.containsKey(objectID)) { System.err.println("getObject(): object is null but objectList contains objectID key"); } else { - System.err.println("getObject(): object of id "+ objectID + "is null. Destroying object."); - destroyObject(object,0); - return null; + System.err.println("getObject(): object of id "+ objectID + "is null."); + Thread.currentThread().getStackTrace(); } } From 0a60cf3c7a57fd0f5a9661c27b0c3e48b405199f Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 01:13:27 -0500 Subject: [PATCH 09/17] dump the stack --- src/services/object/ObjectService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 67b7e89f..8da93689 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -575,8 +575,8 @@ public class ObjectService implements INetworkDispatch { if (objectList.containsKey(objectID)) { System.err.println("getObject(): object is null but objectList contains objectID key"); } else { - System.err.println("getObject(): object of id "+ objectID + "is null."); - Thread.currentThread().getStackTrace(); + System.err.println("getObject(): object is null"); + Thread.currentThread().dumpStack(); } } From ca1f3fd6b8fca04d912d74b2052c066abdd614ed Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 01:21:10 -0500 Subject: [PATCH 10/17] staticservice fix, hopefully --- src/services/StaticService.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/services/StaticService.java b/src/services/StaticService.java index e09c2288..96a511e4 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -127,7 +127,10 @@ public class StaticService implements INetworkDispatch { long buildingId = 0; int cellNumber = 0; - SWGObject cell = core.objectService.getObject(cellId); + if (cellId != 0L) { + SWGObject cell = core.objectService.getObject(cellId); + return null; + } if (cellId != 0 && cell == null) { System.err.println("CellId invalid for template " + template); From 23bdbcb0ef4d7de56787bd8fef14c68028885827 Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 01:22:28 -0500 Subject: [PATCH 11/17] had my logic reversed, need more coffee --- src/services/StaticService.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/services/StaticService.java b/src/services/StaticService.java index 96a511e4..85086dbe 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -127,12 +127,9 @@ public class StaticService implements INetworkDispatch { long buildingId = 0; int cellNumber = 0; - if (cellId != 0L) { + if (cellId != 0L && cellId != 0) { SWGObject cell = core.objectService.getObject(cellId); - return null; - } - - if (cellId != 0 && cell == null) { + } else { System.err.println("CellId invalid for template " + template); return null; } From a549bedd6b740e74e499d205bf8d0a5f101d6e58 Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 01:24:59 -0500 Subject: [PATCH 12/17] avoid errors --- src/services/StaticService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/services/StaticService.java b/src/services/StaticService.java index 85086dbe..0af320d3 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -127,8 +127,10 @@ public class StaticService implements INetworkDispatch { long buildingId = 0; int cellNumber = 0; + SWGObject cell = null; + if (cellId != 0L && cellId != 0) { - SWGObject cell = core.objectService.getObject(cellId); + cell = core.objectService.getObject(cellId); } else { System.err.println("CellId invalid for template " + template); return null; From 998b1d9e3971397433efcdfaa4d3247d7a7572d4 Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 01:52:16 -0500 Subject: [PATCH 13/17] fix what appears to be a bug --- src/services/object/ObjectService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 8da93689..a85bd4cb 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -1229,7 +1229,7 @@ public class ObjectService implements INetworkDispatch { if(object.getParentId() != 0 && object.getContainer() == null) object.setParent(getObject(object.getParentId())); object.getContainerInfo(object.getTemplate()); - if(getObject(object.getObjectID()) == null) + if(getObject(object.getObjectID()) != null) objectList.put(object.getObjectID(), object); }); From a7d5e0d2fdee950db76ffa50efb652dd5164d712 Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 01:59:48 -0500 Subject: [PATCH 14/17] is the object null? --- src/services/object/ObjectService.java | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index a85bd4cb..89fcc439 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -1223,14 +1223,18 @@ public class ObjectService implements INetworkDispatch { }); creature.viewChildren(creature, true, true, (object) -> { - if(object.getMutex() == null) - object.initializeBaselines(); - object.initAfterDBLoad(); - if(object.getParentId() != 0 && object.getContainer() == null) - object.setParent(getObject(object.getParentId())); - object.getContainerInfo(object.getTemplate()); - if(getObject(object.getObjectID()) != null) - objectList.put(object.getObjectID(), object); + if (object != null) { + if(object.getMutex() == null) + object.initializeBaselines(); + object.initAfterDBLoad(); + if(object.getParentId() != 0 && object.getContainer() == null) + object.setParent(getObject(object.getParentId())); + object.getContainerInfo(object.getTemplate()); + if(getObject(object.getObjectID()) != null) + objectList.put(object.getObjectID(), object); + } else { + Thread.currentThread().dumpStack(); + } }); if(creature.getParentId() != 0) { From 6e2e6beab3d4bd0f254d39ccf1f31a1eb3572e0e Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 02:15:42 -0500 Subject: [PATCH 15/17] more error handling for null creatures --- src/services/object/ObjectService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 89fcc439..0aba9904 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -1149,7 +1149,8 @@ public class ObjectService implements INetworkDispatch { return; } CreatureObject creature = null; - if(getObject(objectId) == null) { + + if(objectId != 0 && objectId != 0L && getObject(objectId) == null) { creature = getCreatureFromDB(objectId); if(creature == null) { System.err.println("Cant get creature from db"); @@ -1166,7 +1167,7 @@ public class ObjectService implements INetworkDispatch { } else { if (!(getObject(objectId) instanceof CreatureObject)) { - System.out.println("Character is not an instance of CreatureObject!"); + System.out.println("Character is not an instance of CreatureObject or is null!"); return; } From 6e3fdb73043dc94b834c4499eb59fc5ef7d9dc69 Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 02:22:30 -0500 Subject: [PATCH 16/17] longs when null equate to 0L --- src/services/object/ObjectService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 0aba9904..5819ab18 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -1148,9 +1148,10 @@ public class ObjectService implements INetworkDispatch { System.err.println("NULL Client"); return; } + CreatureObject creature = null; - if(objectId != 0 && objectId != 0L && getObject(objectId) == null) { + if(objectId != 0L && getObject(objectId) == null) { creature = getCreatureFromDB(objectId); if(creature == null) { System.err.println("Cant get creature from db"); From 0670c8478594261a18c73aef6d1dbc76551319ef Mon Sep 17 00:00:00 2001 From: Matt Parnell Date: Sun, 5 Oct 2014 03:23:01 -0500 Subject: [PATCH 17/17] another potential fix --- src/services/command/CommandService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/services/command/CommandService.java b/src/services/command/CommandService.java index 32c7fe68..2b7b218f 100644 --- a/src/services/command/CommandService.java +++ b/src/services/command/CommandService.java @@ -997,6 +997,11 @@ public class CommandService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { + if (data == null){ + System.out.println("NULL data passed to insertOpcodes, ignoring."); + return; + } + data.order(ByteOrder.LITTLE_ENDIAN); Client client = core.getClient(session); @@ -1017,7 +1022,7 @@ public class CommandService implements INetworkDispatch { BaseSWGCommand command = getCommandByCRC(commandCRC); if (command == null) { - //System.out.println("Unknown Command CRC: " + commandEnqueue.getCommandCRC()); + System.out.println("Unknown Command CRC: " + commandEnqueue.getCommandCRC()); return; }