Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id C39A7200B9C for ; Mon, 10 Oct 2016 19:54:06 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id C2386160AE1; Mon, 10 Oct 2016 17:54:06 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 1245A160AD1 for ; Mon, 10 Oct 2016 19:54:05 +0200 (CEST) Received: (qmail 98949 invoked by uid 500); 10 Oct 2016 17:54:02 -0000 Mailing-List: contact commits-help@pdfbox.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@pdfbox.apache.org Delivered-To: mailing list commits@pdfbox.apache.org Received: (qmail 98939 invoked by uid 99); 10 Oct 2016 17:54:02 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 10 Oct 2016 17:54:02 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id D56B018023E for ; Mon, 10 Oct 2016 17:54:01 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -1.999 X-Spam-Level: X-Spam-Status: No, score=-1.999 tagged_above=-999 required=6.31 tests=[KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-2.999] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id WQmkMri-UP5s for ; Mon, 10 Oct 2016 17:54:01 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id A69F95F24F for ; Mon, 10 Oct 2016 17:54:00 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 2DE22E0750 for ; Mon, 10 Oct 2016 17:53:59 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 2E9F13A0218 for ; Mon, 10 Oct 2016 17:53:59 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1764157 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java Date: Mon, 10 Oct 2016 17:53:59 -0000 To: commits@pdfbox.apache.org From: tilman@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20161010175359.2E9F13A0218@svn01-us-west.apache.org> archived-at: Mon, 10 Oct 2016 17:54:06 -0000 Author: tilman Date: Mon Oct 10 17:53:58 2016 New Revision: 1764157 URL: http://svn.apache.org/viewvc?rev=1764157&view=rev Log: PDFBOX-3514: avoid endless recursion in toString(), by Simon Steiner Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java?rev=1764157&r1=1764156&r2=1764157&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSDictionary.java Mon Oct 10 17:53:58 2016 @@ -17,6 +17,7 @@ package org.apache.pdfbox.cos; import java.io.IOException; +import java.io.InputStream; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; @@ -27,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.apache.pdfbox.io.IOUtils; import org.apache.pdfbox.pdmodel.common.COSObjectable; import org.apache.pdfbox.util.DateConverter; import org.apache.pdfbox.util.SmallMap; @@ -1467,9 +1469,8 @@ public class COSDictionary extends COSBa */ public COSBase getObjectFromPath(String objPath) { - COSBase retval = null; String[] path = objPath.split(PATH_SEPARATOR); - retval = this; + COSBase retval = this; for (String pathString : path) { if (retval instanceof COSArray) @@ -1501,25 +1502,54 @@ public class COSDictionary extends COSBa @Override public String toString() { - StringBuilder retVal = new StringBuilder(getClass().getSimpleName()); - retVal.append("{"); - for (COSName key : items.keySet()) - { - retVal.append("("); - retVal.append(key); - retVal.append(":"); - if (getDictionaryObject(key) != null) + try + { + return getDictionaryString(this, new ArrayList()); + } + catch (IOException e) + { + return "COSDictionary{" + e.getMessage() + "}"; + } + } + + private static String getDictionaryString(COSBase base, List objs) throws IOException + { + if (base == null) + { + return "null"; + } + if (objs.contains(base)) + { + // avoid endless recursion + return String.valueOf(base.hashCode()); + } + objs.add(base); + if (base instanceof COSDictionary) + { + StringBuilder sb = new StringBuilder(); + sb.append("COSDictionary{"); + for (Map.Entry x : ((COSDictionary) base).entrySet()) { - retVal.append(getDictionaryObject(key).toString()); + sb.append(x.getKey()); + sb.append(":"); + sb.append(getDictionaryString(x.getValue(), objs)); + sb.append(";"); } - else + sb.append("}"); + if (base instanceof COSStream) { - retVal.append(""); + InputStream stream = ((COSStream) base).createRawInputStream(); + byte[] b = IOUtils.toByteArray(stream); + sb.append("COSStream{").append(Arrays.hashCode(b)).append("}"); + stream.close(); } - retVal.append(") "); + return sb.toString(); + } + if (base instanceof COSObject) + { + COSObject obj = (COSObject) base; + return "COSObject{" + getDictionaryString(obj.getObject(), objs) + "}"; } - retVal.append("}"); - return retVal.toString(); + return base.toString(); } - }