[prev in list] [next in list] [prev in thread] [next in thread]
List: fop-dev
Subject: [jira] [Created] (FOP-2725) Division by zero in PreviewPanel.PageNumberListener
From: "Eo Manis (JIRA)" <jira () apache ! org>
Date: 2017-07-12 22:15:00
Message-ID: JIRA.13086726.1499897661000.233704.1499897700100 () Atlassian ! JIRA
[Download RAW message or body]
Eo Manis created FOP-2725:
-----------------------------
Summary: Division by zero in PreviewPanel.PageNumberListener
Key: FOP-2725
URL: https://issues.apache.org/jira/browse/FOP-2725
Project: FOP
Issue Type: Bug
Components: renderer/awt
Affects Versions: 2.1
Environment: Microsoft Windows 7 Professional x64, Oracle JRE 8u121 x64, \
also Red Hat OpenJDK for Windows 8u121 Reporter: Eo Manis
The Apache FOP print preview panel now and then throws an ArithmeticException due to \
a division by zero.
The affected application has a print preview where the user can navigate through a \
list of printouts, and it lazily creates and keeps PreviewPanels for them, as \
rendering is expensive. As the user navigates to a different printout, the current \
printout's PreviewPanel instance is removed from the Swing container layout and the \
next printout's PreviewPanel instance is put onto the layout. At this step, sometimes \
the ArithmeticException occurs, wreaking all kinds of havoc with the application.
It may be the case that sometimes the PageNumberListener is fired from a PreviewPanel \
instance that is not contained in any layout, and in that case the scroll bar / \
Adjustable reports bad values for getMinimum() and getMaximum(). Possibly the \
PageNumberListener should guard against that and perhaps just do nothing then.
{{
private class PageNumberListener implements AdjustmentListener {
public void adjustmentValueChanged(AdjustmentEvent e) {
if (displayMode == PreviewPanel.CONTINUOUS || displayMode == \
PreviewPanel.CONT_FACING) { Adjustable a = e.getAdjustable();
int value = +e.getValue();
int min = a.getMinimum();
int max = a.getMaximum();
*--> int page = ((renderer.getNumberOfPages() * value) / (max - min));*
if (page != currentPage) {
int oldPage = currentPage;
currentPage = page;
firePageChange(oldPage, currentPage);
}
}
}
}
max == 0
min == 0
java.lang.ArithmeticException: / by zero
at org.apache.fop.render.awt.viewer.PreviewPanel$PageNumberListener.adjustmentValueChanged(PreviewPanel.java:403)
at javax.swing.JScrollBar.fireAdjustmentValueChanged(JScrollBar.java:705)
at javax.swing.JScrollBar.access$100(JScrollBar.java:81)
at javax.swing.JScrollBar$ModelListener.stateChanged(JScrollBar.java:727)
at javax.swing.DefaultBoundedRangeModel.fireStateChanged(DefaultBoundedRangeModel.java:364)
at javax.swing.DefaultBoundedRangeModel.setRangeProperties(DefaultBoundedRangeModel.java:302)
at javax.swing.JScrollBar.setValues(JScrollBar.java:623)
at javax.swing.plaf.basic.BasicScrollPaneUI.syncScrollPaneWithViewport(BasicScrollPaneUI.java:285)
at javax.swing.plaf.basic.BasicScrollPaneUI$Handler.stateChanged(BasicScrollPaneUI.java:1034)
at javax.swing.JViewport.fireStateChanged(JViewport.java:1369)
at javax.swing.JViewport.reshape(JViewport.java:839)
at java.awt.Component.setBounds(Component.java:2261)
at java.awt.Component.setBounds(Component.java:2405)
at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:890)
at java.awt.Container.layout(Container.java:1510)
at java.awt.Container.doLayout(Container.java:1499)
at java.awt.Container.validateTree(Container.java:1695)
at java.awt.Container.validateTree(Container.java:1704)
at java.awt.Container.validateTree(Container.java:1704)
at java.awt.Container.validateTree(Container.java:1704)
at java.awt.Container.validate(Container.java:1630)
at javax.swing.plaf.basic.BasicTabbedPaneUI.ensureCurrentLayout(BasicTabbedPaneUI.java:1447)
at javax.swing.plaf.basic.BasicTabbedPaneUI.getTabBounds(BasicTabbedPaneUI.java:1467)
at com.sun.java.swing.plaf.windows.WindowsTabbedPaneUI.setRolloverTab(WindowsTabbedPaneUI.java:104)
at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.layoutContainer(BasicTabbedPaneUI.java:2400)
at java.awt.Container.layout(Container.java:1510)
at java.awt.Container.doLayout(Container.java:1499)
at java.awt.Container.validateTree(Container.java:1695)
at java.awt.Container.validateTree(Container.java:1704)
at java.awt.Container.validateTree(Container.java:1704)
at java.awt.Container.validateTree(Container.java:1704)
at java.awt.Container.validateTree(Container.java:1704)
at java.awt.Container.validateTree(Container.java:1704)
at java.awt.Container.validateTree(Container.java:1704)
at java.awt.Container.validate(Container.java:1630)
at javax.swing.RepaintManager$3.run(RepaintManager.java:711)
at javax.swing.RepaintManager$3.run(RepaintManager.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:708)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1731)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
at java.awt.Dialog.show(Dialog.java:1084)
at java.awt.Component.show(Component.java:1671)
at java.awt.Component.setVisible(Component.java:1623)
at java.awt.Window.setVisible(Window.java:1014)
at java.awt.Dialog.setVisible(Dialog.java:1005)
at com.guetermann.printout.ui.PrintoutsDisplayDialog.setVisible(PrintoutsDisplayDialog.java:80)
at com.guetermann.printout.ui.PrintoutPrintPanel.showPrintouts(PrintoutPrintPanel.java:908)
at com.guetermann.printout.ui.PrintoutPrintPanel.access$6(PrintoutPrintPanel.java:888)
at com.guetermann.printout.ui.PrintoutPrintPanel$15.actionPerformed(PrintoutPrintPanel.java:681)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
}}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic