From 233fbadf0a9e4dfbaa439c764d31a46641c6bb85 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 28 Dec 2021 10:24:04 +0000 Subject: [PATCH] close cursors in finally blocks git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1896470 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/xslf/usermodel/XSLFChart.java | 11 +- .../poi/xslf/usermodel/XSLFGraphicFrame.java | 15 +- .../poi/xslf/usermodel/XSLFObjectShape.java | 78 +++++----- .../poi/xslf/usermodel/XSLFPictureShape.java | 39 +++-- .../usermodel/XSLFPropertiesDelegate.java | 9 +- .../apache/poi/xslf/usermodel/XSLFShape.java | 28 ++-- .../apache/poi/xslf/usermodel/XSLFSheet.java | 2 +- .../apache/poi/xslf/usermodel/XSLFTable.java | 27 ++-- .../poi/xslf/usermodel/XSLFTextParagraph.java | 16 +- .../poi/xssf/usermodel/XSSFDrawing.java | 66 ++++---- .../XWPFAbstractFootnoteEndnote.java | 23 +-- .../poi/xwpf/usermodel/XWPFComment.java | 23 +-- .../poi/xwpf/usermodel/XWPFDocument.java | 23 +-- .../apache/poi/xwpf/usermodel/XWPFHeader.java | 25 +-- .../poi/xwpf/usermodel/XWPFHeaderFooter.java | 129 ++++++++++------ .../poi/xwpf/usermodel/XWPFParagraph.java | 142 +++++++++--------- .../poi/xwpf/usermodel/XWPFTableCell.java | 123 +++++++++------ .../poi/xwpf/usermodel/XWPFTableRow.java | 19 ++- 18 files changed, 465 insertions(+), 333 deletions(-) diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFChart.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFChart.java index c54cba50c8..88921d7f69 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFChart.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFChart.java @@ -139,10 +139,13 @@ public final class XSLFChart extends XDDFChart { CTGraphicalObjectData gr = frame.addNewGraphic().addNewGraphicData(); XmlCursor grCur = gr.newCursor(); - grCur.toNextToken(); - grCur.beginElement(new QName(CHART_URI, "chart")); - grCur.insertAttributeWithValue("id", PackageRelationshipTypes.CORE_PROPERTIES_ECMA376_NS, rID); - grCur.dispose(); + try { + grCur.toNextToken(); + grCur.beginElement(new QName(CHART_URI, "chart")); + grCur.insertAttributeWithValue("id", PackageRelationshipTypes.CORE_PROPERTIES_ECMA376_NS, rID); + } finally { + grCur.dispose(); + } gr.setUri(CHART_URI); return frame; diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java index 1e5b4355bb..88295dcbdc 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java @@ -191,9 +191,12 @@ public class XSLFGraphicFrame extends XSLFShape implements GraphicalFrame { */ @SuppressWarnings({"unchecked", "WeakerAccess", "unused", "SameParameterValue"}) protected T getChild(Class childClass, String namespace, String nodename) { - XmlCursor cur = getXmlObject().newCursor(); T child = null; - if (cur.toChild(namespace, nodename)) { - child = (T)cur.getObject(); - } - if (cur.toChild(XSLFRelation.NS_DRAWINGML, nodename)) { - child = (T)cur.getObject(); + XmlCursor cur = getXmlObject().newCursor(); + try { + if (cur.toChild(namespace, nodename)) { + child = (T)cur.getObject(); + } + if (cur.toChild(XSLFRelation.NS_DRAWINGML, nodename)) { + child = (T)cur.getObject(); + } + } finally { + cur.dispose(); } - cur.dispose(); return child; } @@ -457,12 +460,15 @@ public abstract class XSLFShape implements Shape { } else { return null; } - XmlCursor cur = styleLst.newCursor(); XSLFFillProperties fp = null; - if (cur.toChild(Math.toIntExact(childIdx))) { - fp = XSLFPropertiesDelegate.getFillDelegate(cur.getObject()); + XmlCursor cur = styleLst.newCursor(); + try { + if (cur.toChild(Math.toIntExact(childIdx))) { + fp = XSLFPropertiesDelegate.getFillDelegate(cur.getObject()); + } + } finally { + cur.dispose(); } - cur.dispose(); CTSchemeColor phClr = fillRef.getSchemeClr(); PaintStyle res = selectPaint(fp, phClr, theme.getPackagePart(), theme, hasPlaceholder); diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSheet.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSheet.java index 6812e86c55..20570c789b 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSheet.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSheet.java @@ -142,7 +142,7 @@ implements XSLFShapeContainer, Sheet { List shapes = new ArrayList<>(); XmlCursor cur = spTree.newCursor(); try { - for (boolean b=cur.toFirstChild();b;b=cur.toNextSibling()) { + for (boolean b = cur.toFirstChild(); b; b = cur.toNextSibling()) { XmlObject ch = cur.getObject(); if(ch instanceof CTShape){ // simple shape diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java index 2974b46b59..b6f2b3350a 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java @@ -261,17 +261,22 @@ public class XSLFTable extends XSLFGraphicFrame implements Iterable(); XmlCursor cursor = ctTc.newCursor(); - cursor.selectPath("./*"); - while (cursor.toNextSelection()) { - XmlObject o = cursor.getObject(); - if (o instanceof CTP) { - XWPFParagraph p = new XWPFParagraph((CTP) o, this); - paragraphs.add(p); - bodyElements.add(p); - } - if (o instanceof CTTbl) { - XWPFTable t = new XWPFTable((CTTbl) o, this); - tables.add(t); - bodyElements.add(t); - } - if (o instanceof CTSdtBlock) { - XWPFSDT c = new XWPFSDT((CTSdtBlock) o, this); - bodyElements.add(c); - } - if (o instanceof CTSdtRun) { - XWPFSDT c = new XWPFSDT((CTSdtRun) o, this); - bodyElements.add(c); + try { + cursor.selectPath("./*"); + while (cursor.toNextSelection()) { + XmlObject o = cursor.getObject(); + if (o instanceof CTP) { + XWPFParagraph p = new XWPFParagraph((CTP) o, this); + paragraphs.add(p); + bodyElements.add(p); + } + if (o instanceof CTTbl) { + XWPFTable t = new XWPFTable((CTTbl) o, this); + tables.add(t); + bodyElements.add(t); + } + if (o instanceof CTSdtBlock) { + XWPFSDT c = new XWPFSDT((CTSdtBlock) o, this); + bodyElements.add(c); + } + if (o instanceof CTSdtRun) { + XWPFSDT c = new XWPFSDT((CTSdtRun) o, this); + bodyElements.add(c); + } } + } finally { + cursor.dispose(); } - cursor.dispose(); } @Internal @@ -276,18 +279,24 @@ public class XWPFTableCell implements IBody, ICell { paragraphs.add(pos, newP); } int i = 0; - XmlCursor p2 = p.newCursor(); - cursor.toCursor(p2); - p2.dispose(); + final XmlCursor p2 = p.newCursor(); + try { + cursor.toCursor(p2); + } finally { + p2.dispose(); + } while (cursor.toPrevSibling()) { o = cursor.getObject(); if (o instanceof CTP || o instanceof CTTbl) i++; } bodyElements.add(i, newP); - p2 = p.newCursor(); - cursor.toCursor(p2); - p2.dispose(); + final XmlCursor p3 = p.newCursor(); + try { + cursor.toCursor(p3); + } finally { + p3.dispose(); + } cursor.toEndToken(); return newP; } @@ -313,18 +322,24 @@ public class XWPFTableCell implements IBody, ICell { tables.add(pos, newT); } int i = 0; - XmlCursor cursor2 = t.newCursor(); - while (cursor2.toPrevSibling()) { - o = cursor2.getObject(); - if (o instanceof CTP || o instanceof CTTbl) - i++; + final XmlCursor cursor2 = t.newCursor(); + try { + while (cursor2.toPrevSibling()) { + o = cursor2.getObject(); + if (o instanceof CTP || o instanceof CTTbl) + i++; + } + } finally { + cursor2.dispose(); } - cursor2.dispose(); bodyElements.add(i, newT); - cursor2 = t.newCursor(); - cursor.toCursor(cursor2); - cursor.toEndToken(); - cursor2.dispose(); + final XmlCursor cursor3 = t.newCursor(); + try { + cursor.toCursor(cursor3); + cursor.toEndToken(); + } finally { + cursor3.dispose(); + } return newT; } return null; @@ -335,10 +350,13 @@ public class XWPFTableCell implements IBody, ICell { */ private boolean isCursorInTableCell(XmlCursor cursor) { XmlCursor verify = cursor.newCursor(); - verify.toParent(); - boolean result = (verify.getObject() == this.ctTc); - verify.dispose(); - return result; + try { + verify.toParent(); + boolean result = (verify.getObject() == this.ctTc); + return result; + } finally { + verify.dispose(); + } } @Override @@ -475,16 +493,21 @@ public class XWPFTableCell implements IBody, ICell { */ @Override public XWPFTableCell getTableCell(CTTc cell) { - XmlCursor cursor = cell.newCursor(); - cursor.toParent(); - XmlObject o = cursor.getObject(); - if (!(o instanceof CTRow)) { - return null; + XmlObject o; + CTRow row; + final XmlCursor cursor = cell.newCursor(); + try { + cursor.toParent(); + o = cursor.getObject(); + if (!(o instanceof CTRow)) { + return null; + } + row = (CTRow) o; + cursor.toParent(); + o = cursor.getObject(); + } finally { + cursor.dispose(); } - CTRow row = (CTRow) o; - cursor.toParent(); - o = cursor.getObject(); - cursor.dispose(); if (!(o instanceof CTTbl)) { return null; } diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java index da96c8320b..18783f64c4 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java @@ -181,16 +181,19 @@ public class XWPFTableRow { //Can't use ctRow.getTcList because that only gets table cells //Can't use ctRow.getSdtList because that only gets sdts that are at cell level XmlCursor cursor = ctRow.newCursor(); - cursor.selectPath("./*"); - while (cursor.toNextSelection()) { - XmlObject o = cursor.getObject(); - if (o instanceof CTTc) { - cells.add(new XWPFTableCell((CTTc) o, this, table.getBody())); - } else if (o instanceof CTSdtCell) { - cells.add(new XWPFSDTCell((CTSdtCell) o, this, table.getBody())); + try { + cursor.selectPath("./*"); + while (cursor.toNextSelection()) { + XmlObject o = cursor.getObject(); + if (o instanceof CTTc) { + cells.add(new XWPFTableCell((CTTc) o, this, table.getBody())); + } else if (o instanceof CTSdtCell) { + cells.add(new XWPFSDTCell((CTSdtCell) o, this, table.getBody())); + } } + } finally { + cursor.dispose(); } - cursor.dispose(); return cells; } -- 2.39.5