Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

prevent non-init map NPEs #1745

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions src/VASL/build/module/map/ASLPieceMover.java
Original file line number Diff line number Diff line change
Expand Up @@ -1022,9 +1022,12 @@ private List<Point> buildBoundingBox() {
boundingBox = firstPiece.getShape().getBounds();
//JY
final ASLMap map = (ASLMap) firstPiece.getMap();
double pZoom = map.PieceScalerBoardZoom(firstPiece);
if (!(firstPiece instanceof Stack)) {
boundingBox = this.scalePiece(firstPiece.getShape().getBounds(), pZoom); //Centred on 0 0, with min and max corresponding to width
double pZoom;
if (map != null) {
pZoom = map.PieceScalerBoardZoom(firstPiece);
if (!(firstPiece instanceof Stack)) {
boundingBox = this.scalePiece(firstPiece.getShape().getBounds(), pZoom); //Centred on 0 0, with min and max corresponding to width
}
Copy link
Contributor

@uckelman uckelman May 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Simpler would be:

if (map != null && !(firstPiece instanceof Stack)) {
  final double pZoom = map.PieceScalerBoardZoom(firstPiece);
  boundingBox = this.scalePiece(firstPiece.getShape().getBounds(), pZoom); //Centred on 0 0, with min and max corresponding to width
}

and similar below at 1045.

}
//JY
relativePositions.add(new Point(0, 0));
Expand Down Expand Up @@ -1148,7 +1151,11 @@ private void drawDragImage(BufferedImage image, Component target,
//JY
//final Map map = piece.getMap();
final ASLMap map = (ASLMap) piece.getMap();
double pZoom = ((ASLMap)map).PieceScalerBoardZoom(piece);

double pZoom = 0.0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you sure you want pZoom to be zero? I don't know that there are any circumstances in which zero is a valid value for the scale factor.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think its fine to change it to 1.0 or anything really, it just needs to be initialized to something so it can be built. Outside of the un-initialized "map" at startup on Linux it doesn't matter becuase once "map" is initialized that value is never used. Here is an example of a stack trace I am trying to prevent from happening. With the changes in this PR they go away.

2024-05-23 00:17:48,698 [269570-main] INFO  VASSAL.launch.StartUp - OS Linux 6.7.12-amd64 amd64
2024-05-23 00:17:48,698 [269570-main] INFO  VASSAL.launch.StartUp - Java version 17.0.11
2024-05-23 00:17:48,698 [269570-main] INFO  VASSAL.launch.StartUp - Java home /usr/lib/jvm/java-17-openjdk-amd64
2024-05-23 00:17:48,698 [269570-main] INFO  VASSAL.launch.StartUp - VASSAL version 3.7.12
2024-05-23 00:17:48,839 [269570-AWT-EventQueue-0] INFO  VASSAL.launch.ModuleManager - Manager
2024-05-23 00:17:50,677 [269570-SwingWorker-pool-1-thread-1] INFO  VASSAL.launch.AbstractLaunchAction - Loading module file /home/euterpe/asl/vasl/VASSAL-3.7.12/../vasl/vasl-6.6.9-beta1.second.vmod
2024-05-23 00:17:52,189 [269570-SwingWorker-pool-1-thread-1] INFO  VASSAL.launch.TilingHandler - No images to tile.
2024-05-23 00:17:52,194 [269570-SwingWorker-pool-1-thread-1] INFO  VASSAL.launch.AbstractLaunchAction - Loading module VASL
2024-05-23 00:17:52,204 [269570-SwingWorker-pool-1-thread-1] INFO  VASSAL.tools.io.ProcessLauncher - launching /usr/lib/jvm/java-17-openjdk-amd64/bin/java -Xms1024M -Xmx1024M -Duser.home=/home/euterpe -Duser.dir=/home/euterpe/asl/vasl/VASSAL-3.7.12 -cp /home/euterpe/asl/vasl/VASSAL-3.7.12/lib/Vengine.jar VASSAL.launch.Player --load -- ../vasl/vasl-6.6.9-beta1.second.vmod
2024-05-23 00:17:53,070 [269614-main] INFO  VASSAL.launch.StartUp - Starting
2024-05-23 00:17:53,087 [269614-main] INFO  VASSAL.launch.StartUp - OS Linux 6.7.12-amd64 amd64
2024-05-23 00:17:53,087 [269614-main] INFO  VASSAL.launch.StartUp - Java version 17.0.11
2024-05-23 00:17:53,087 [269614-main] INFO  VASSAL.launch.StartUp - Java home /usr/lib/jvm/java-17-openjdk-amd64
2024-05-23 00:17:53,088 [269614-main] INFO  VASSAL.launch.StartUp - VASSAL version 3.7.12
2024-05-23 00:17:53,088 [269614-main] INFO  VASSAL.launch.Launcher - Player
2024-05-23 00:18:05,770 [269614-AWT-EventQueue-0] INFO  VASSAL.build.GameModule - VASL version 6.6.9-beta1
2024-05-23 00:18:05,814 [269614-AWT-EventQueue-0] WARN  VASSAL.build.GameModule - No more than one [Stacking options] allowed in Main Map [Map Window]
2024-05-23 00:18:14,593 [269614-AWT-EventQueue-0] INFO  VASSAL.launch.TilingHandler - No images to tile.
2024-05-23 00:19:51,950 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - java.lang.NullPointerException: Cannot invoke "VASL.build.module.ASLMap.PieceScalerBoardZoom(VASSAL.counters.GamePiece)" because "map" is null
2024-05-23 00:19:51,951 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at VASL.build.module.map.ASLPieceMover$AbstractDragHandler.buildBoundingBox(ASLPieceMover.java:1025)
2024-05-23 00:19:51,951 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at VASL.build.module.map.ASLPieceMover$AbstractDragHandler.makeDragImageCursorCommon(ASLPieceMover.java:961)
2024-05-23 00:19:51,951 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at VASL.build.module.map.ASLPieceMover$DragHandlerNoImage.makeDragCursor(ASLPieceMover.java:1628)
2024-05-23 00:19:51,951 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at VASL.build.module.map.ASLPieceMover$DragHandlerNoImage.dragEnter(ASLPieceMover.java:1711)
2024-05-23 00:19:51,951 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.dnd.DropTarget.dragEnter(DropTarget.java:358)
2024-05-23 00:19:51,951 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/sun.awt.dnd.SunDropTargetContextPeer.processEnterMessage(SunDropTargetContextPeer.java:335)
2024-05-23 00:19:51,951 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/sun.awt.X11.XDropTargetContextPeer.processEnterMessage(XDropTargetContextPeer.java:166)
2024-05-23 00:19:51,951 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEnterEvent(SunDropTargetContextPeer.java:811)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:779)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:48)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4866)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.LightweightDispatcher.retargetMouseEnterExit(Container.java:4726)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.LightweightDispatcher.trackDropTargetEnterExit(Container.java:4675)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.LightweightDispatcher.trackMouseEnterExit(Container.java:4688)
2024-05-23 00:19:51,952 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:4641)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4511)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
2024-05-23 00:19:51,953 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
2024-05-23 00:19:51,954 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747)
2024-05-23 00:19:51,954 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
2024-05-23 00:19:51,954 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
2024-05-23 00:19:51,954 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
2024-05-23 00:19:51,954 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744)
2024-05-23 00:19:51,954 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
2024-05-23 00:19:51,954 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
2024-05-23 00:19:51,954 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
2024-05-23 00:19:51,955 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
2024-05-23 00:19:51,955 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
2024-05-23 00:19:51,955 [269614-AWT-EventQueue-0] WARN  VASSAL.tools.logging.LoggedOutputStream - at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)```

if (map != null) {
pZoom = ((ASLMap)map).PieceScalerBoardZoom(piece);
}
//JY

if (piece instanceof Stack) {
Expand Down