You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2017/11/24 01:02:21 UTC

svn commit: r1816205 - in /poi: site/src/documentation/content/xdocs/ trunk/src/examples/src/org/apache/poi/hpsf/examples/ trunk/src/java/org/apache/poi/hpsf/ trunk/src/java/org/apache/poi/hpsf/wellknown/ trunk/src/testcases/org/apache/poi/hpsf/basic/

Author: kiwiwings
Date: Fri Nov 24 01:02:20 2017
New Revision: 1816205

URL: http://svn.apache.org/viewvc?rev=1816205&view=rev
Log:
#61809 - Infinite loop in SectionIDMap.get() and .put()

Modified:
    poi/site/src/documentation/content/xdocs/status.xml
    poi/trunk/src/examples/src/org/apache/poi/hpsf/examples/WriteTitle.java
    poi/trunk/src/java/org/apache/poi/hpsf/DocumentSummaryInformation.java
    poi/trunk/src/java/org/apache/poi/hpsf/PropertySet.java
    poi/trunk/src/java/org/apache/poi/hpsf/PropertySetFactory.java
    poi/trunk/src/java/org/apache/poi/hpsf/Section.java
    poi/trunk/src/java/org/apache/poi/hpsf/SummaryInformation.java
    poi/trunk/src/java/org/apache/poi/hpsf/wellknown/PropertyIDMap.java
    poi/trunk/src/java/org/apache/poi/hpsf/wellknown/SectionIDMap.java
    poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java
    poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java
    poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java

Modified: poi/site/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/site/src/documentation/content/xdocs/status.xml?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/site/src/documentation/content/xdocs/status.xml (original)
+++ poi/site/src/documentation/content/xdocs/status.xml Fri Nov 24 01:02:20 2017
@@ -66,6 +66,7 @@
         <summary-item>Removal of deprecated classes and methods that were marked for removal in v3.18</summary-item>
       </summary>
       <actions>
+        <action dev="PD" type="fix" fixes-bug="61809" module="HPSF">Infinite loop in SectionIDMap.get() and .put()</action>
         <action dev="PD" type="add" fixes-bug="60887" module="XSSF">Surface XSSF Header/Footer Attributes</action>
         <action dev="PD" type="add" fixes-bug="61730" module="SS Common">CellRangeAddresses support iterating over their CellAddresses</action>
         <action dev="PD" type="fix" fixes-bug="61727" module="SS Common">CellRangeUtil merge cell ranges broken for certain orders of arguments</action>

Modified: poi/trunk/src/examples/src/org/apache/poi/hpsf/examples/WriteTitle.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/hpsf/examples/WriteTitle.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/examples/src/org/apache/poi/hpsf/examples/WriteTitle.java (original)
+++ poi/trunk/src/examples/src/org/apache/poi/hpsf/examples/WriteTitle.java Fri Nov 24 01:02:20 2017
@@ -21,9 +21,13 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.apache.poi.hpsf.*;
+import org.apache.poi.hpsf.Property;
+import org.apache.poi.hpsf.PropertySet;
+import org.apache.poi.hpsf.Section;
+import org.apache.poi.hpsf.SummaryInformation;
+import org.apache.poi.hpsf.Variant;
+import org.apache.poi.hpsf.WritingNotSupportedException;
 import org.apache.poi.hpsf.wellknown.PropertyIDMap;
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 
 /**
@@ -64,7 +68,7 @@ public class WriteTitle
         /* Turn the property set into a summary information property. This is
          * done by setting the format ID of its first section to
          * SectionIDMap.SUMMARY_INFORMATION_ID. */
-        ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);
+        ms.setFormatID(SummaryInformation.FORMAT_ID);
 
         /* Create an empty property. */    
         final Property p = new Property();

Modified: poi/trunk/src/java/org/apache/poi/hpsf/DocumentSummaryInformation.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hpsf/DocumentSummaryInformation.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hpsf/DocumentSummaryInformation.java (original)
+++ poi/trunk/src/java/org/apache/poi/hpsf/DocumentSummaryInformation.java Fri Nov 24 01:02:20 2017
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.poi.hpsf.wellknown.PropertyIDMap;
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
 
 /**
  * Convenience class representing a DocumentSummary Information stream in a
@@ -34,6 +33,7 @@ import org.apache.poi.hpsf.wellknown.Sec
  * @see SummaryInformation
  */
 public class DocumentSummaryInformation extends PropertySet {
+
     /**
      * The document name a document summary information stream
      * usually has in a POIFS filesystem.
@@ -41,6 +41,18 @@ public class DocumentSummaryInformation
     public static final String DEFAULT_STREAM_NAME =
         "\005DocumentSummaryInformation";
 
+    /**
+     * The DocumentSummaryInformation's first and second sections' format ID.
+     */
+    private static final ClassID DOC_SUMMARY_INFORMATION =
+        new ClassID("{D5CDD502-2E9C-101B-9397-08002B2CF9AE}");    
+    private static final ClassID USER_DEFINED_PROPERTIES =
+        new ClassID("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}");
+    
+    public static final ClassID[] FORMAT_ID = {
+        DOC_SUMMARY_INFORMATION, USER_DEFINED_PROPERTIES
+    };
+    
     @Override
     public PropertyIDMap getPropertySetIDMap() {
     	return PropertyIDMap.getDocumentSummaryInformationProperties();
@@ -51,7 +63,7 @@ public class DocumentSummaryInformation
      * Creates an empty {@link DocumentSummaryInformation}.
      */
     public DocumentSummaryInformation() {
-        getFirstSection().setFormatID(SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID[0]);
+        getFirstSection().setFormatID(DOC_SUMMARY_INFORMATION);
     }
 
     
@@ -812,7 +824,7 @@ public class DocumentSummaryInformation
     private void ensureSection2() {
         if (getSectionCount() < 2) {
             Section s2 = new Section();
-            s2.setFormatID(SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID[1]);
+            s2.setFormatID(USER_DEFINED_PROPERTIES);
             addSection(s2);
         }
     }

Modified: poi/trunk/src/java/org/apache/poi/hpsf/PropertySet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hpsf/PropertySet.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hpsf/PropertySet.java (original)
+++ poi/trunk/src/java/org/apache/poi/hpsf/PropertySet.java Fri Nov 24 01:02:20 2017
@@ -29,7 +29,6 @@ import java.util.List;
 
 import org.apache.poi.EmptyFileException;
 import org.apache.poi.hpsf.wellknown.PropertyIDMap;
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
 import org.apache.poi.poifs.filesystem.DirectoryEntry;
 import org.apache.poi.poifs.filesystem.Entry;
 import org.apache.poi.util.CodePageUtil;
@@ -659,7 +658,7 @@ public class PropertySet {
      * represents a Summary Information, else {@code false}.
      */
     public boolean isSummaryInformation() {
-        return !sections.isEmpty() && matchesSummary(getFirstSection().getFormatID(), SectionIDMap.SUMMARY_INFORMATION_ID); 
+        return !sections.isEmpty() && matchesSummary(getFirstSection().getFormatID(), SummaryInformation.FORMAT_ID); 
     }
 
     /**
@@ -669,7 +668,7 @@ public class PropertySet {
      * represents a Document Summary Information, else {@code false}.
      */
     public boolean isDocumentSummaryInformation() {
-        return !sections.isEmpty() && matchesSummary(getFirstSection().getFormatID(), SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID); 
+        return !sections.isEmpty() && matchesSummary(getFirstSection().getFormatID(), DocumentSummaryInformation.FORMAT_ID); 
     }
     
     /* package */ static boolean matchesSummary(ClassID actual, ClassID... expected) {

Modified: poi/trunk/src/java/org/apache/poi/hpsf/PropertySetFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hpsf/PropertySetFactory.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hpsf/PropertySetFactory.java (original)
+++ poi/trunk/src/java/org/apache/poi/hpsf/PropertySetFactory.java Fri Nov 24 01:02:20 2017
@@ -22,7 +22,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
 import org.apache.poi.poifs.filesystem.DirectoryEntry;
 import org.apache.poi.poifs.filesystem.DocumentEntry;
 import org.apache.poi.poifs.filesystem.DocumentInputStream;
@@ -110,9 +109,9 @@ public class PropertySetFactory {
         stream.reset();
         
         ClassID clsId = new ClassID(clsIdBuf, 0);
-        if (sectionCount > 0 && PropertySet.matchesSummary(clsId, SectionIDMap.SUMMARY_INFORMATION_ID)) {
+        if (sectionCount > 0 && PropertySet.matchesSummary(clsId, SummaryInformation.FORMAT_ID)) {
             return new SummaryInformation(stream);
-        } else if (sectionCount > 0 && PropertySet.matchesSummary(clsId, SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID)) {
+        } else if (sectionCount > 0 && PropertySet.matchesSummary(clsId, DocumentSummaryInformation.FORMAT_ID)) {
             return new DocumentSummaryInformation(stream);
         } else {
             return new PropertySet(stream);

Modified: poi/trunk/src/java/org/apache/poi/hpsf/Section.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hpsf/Section.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hpsf/Section.java (original)
+++ poi/trunk/src/java/org/apache/poi/hpsf/Section.java Fri Nov 24 01:02:20 2017
@@ -31,7 +31,6 @@ import java.util.TreeMap;
 
 import org.apache.commons.collections4.bidimap.TreeBidiMap;
 import org.apache.poi.hpsf.wellknown.PropertyIDMap;
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
 import org.apache.poi.util.CodePageUtil;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.LittleEndian;
@@ -597,29 +596,33 @@ public class Section {
 
     /**
      * Returns the PID string associated with a property ID. The ID
-     * is first looked up in the {@link Section}'s private
-     * dictionary. If it is not found there, the method calls {@link
-     * SectionIDMap#getPIDString}.
+     * is first looked up in the {@link Section Sections} private dictionary.
+     * If it is not found there, the property PID string is taken
+     * from sections format IDs namespace.
+     * If the PID is also undefined there, i.e. it is not well-known,
+     * {@code "[undefined]"} is returned.
      *
      * @param pid The property ID
      *
-     * @return The property ID's string value
+     * @return The well-known property ID string associated with the
+     * property ID {@code pid}
      */
     public String getPIDString(final long pid) {
-        String s = null;
         Map<Long,String> dic = getDictionary();
-        if (dic != null) {
-            s = dic.get(pid);
-        }
-        if (s == null) {
-            s = SectionIDMap.getPIDString(getFormatID(), pid);
+        if (dic == null || !dic.containsKey(pid)) {
+            ClassID fmt = getFormatID();
+            if (SummaryInformation.FORMAT_ID.equals(fmt)) {
+                dic = PropertyIDMap.getSummaryInformationProperties();
+            } else if (DocumentSummaryInformation.FORMAT_ID[0].equals(fmt)) {
+                dic = PropertyIDMap.getDocumentSummaryInformationProperties();
+            }
         }
-        return s;
+        
+        return (dic != null && dic.containsKey(pid)) ? dic.get(pid) : PropertyIDMap.UNDEFINED;
     }
 
     /**
-     * Removes all properties from the section including 0 (dictionary) and
-     * 1 (codepage).
+     * Removes all properties from the section including 0 (dictionary) and 1 (codepage).
      */
     public void clear() {
         for (Property p : getProperties()) {

Modified: poi/trunk/src/java/org/apache/poi/hpsf/SummaryInformation.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hpsf/SummaryInformation.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hpsf/SummaryInformation.java (original)
+++ poi/trunk/src/java/org/apache/poi/hpsf/SummaryInformation.java Fri Nov 24 01:02:20 2017
@@ -23,7 +23,6 @@ import java.io.UnsupportedEncodingExcept
 import java.util.Date;
 
 import org.apache.poi.hpsf.wellknown.PropertyIDMap;
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
 
 /**
  * Convenience class representing a Summary Information stream in a
@@ -38,6 +37,13 @@ public final class SummaryInformation ex
      */
     public static final String DEFAULT_STREAM_NAME = "\005SummaryInformation";
 
+    /**
+     * The SummaryInformation's section's format ID.
+     */
+    public static final ClassID FORMAT_ID =
+        new ClassID("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}");
+
+    @Override
     public PropertyIDMap getPropertySetIDMap() {
     	return PropertyIDMap.getSummaryInformationProperties();
     }
@@ -46,7 +52,7 @@ public final class SummaryInformation ex
      * Creates an empty {@link SummaryInformation}.
      */
     public SummaryInformation() {
-        getFirstSection().setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);
+        getFirstSection().setFormatID(FORMAT_ID);
     }
         
     /**
@@ -594,7 +600,9 @@ public final class SummaryInformation ex
      */
     public Thumbnail getThumbnailThumbnail() {
         byte[] data = getThumbnail();
-        if (data == null) return null;
+        if (data == null) {
+            return null;
+        }
         return new Thumbnail(data);
     }
 

Modified: poi/trunk/src/java/org/apache/poi/hpsf/wellknown/PropertyIDMap.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hpsf/wellknown/PropertyIDMap.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hpsf/wellknown/PropertyIDMap.java (original)
+++ poi/trunk/src/java/org/apache/poi/hpsf/wellknown/PropertyIDMap.java Fri Nov 24 01:02:20 2017
@@ -317,6 +317,11 @@ public class PropertyIDMap implements Ma
     public static final int PID_BEHAVIOUR = 0x80000003;
     
     /**
+     * A property without a known name is described by this string.
+     */
+    public static final String UNDEFINED = "[undefined]";
+    
+    /**
      * Contains the summary information property ID values and
      * associated strings. See the overall HPSF documentation for
      * details!

Modified: poi/trunk/src/java/org/apache/poi/hpsf/wellknown/SectionIDMap.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hpsf/wellknown/SectionIDMap.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hpsf/wellknown/SectionIDMap.java (original)
+++ poi/trunk/src/java/org/apache/poi/hpsf/wellknown/SectionIDMap.java Fri Nov 24 01:02:20 2017
@@ -17,136 +17,44 @@
 
 package org.apache.poi.hpsf.wellknown;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.poi.hpsf.ClassID;
+import org.apache.poi.hpsf.DocumentSummaryInformation;
+import org.apache.poi.hpsf.SummaryInformation;
 import org.apache.poi.util.Internal;
+import org.apache.poi.util.Removal;
 
 /**
- * <p>Maps section format IDs to {@link PropertyIDMap}s. It is
- * initialized with two well-known section format IDs: those of the
- * <tt>\005SummaryInformation</tt> stream and the
- * <tt>\005DocumentSummaryInformation</tt> stream.</p>
- *
- * <p>If you have a section format ID you can use it as a key to query
- * this map.  If you get a {@link PropertyIDMap} returned your section
- * is well-known and you can query the {@link PropertyIDMap} for PID
- * strings. If you get back <code>null</code> you are on your own.</p>
- *
- * <p>This {@link java.util.Map} expects the byte arrays of section format IDs
- * as keys. A key maps to a {@link PropertyIDMap} describing the
- * property IDs in sections with the specified section format ID.</p>
+ * This classed used to map section format IDs to {@link PropertyIDMap PropertyIDMaps},
+ * but there's no way to use custom PropertyIDMaps.<p>
+ * 
+ * It is only kept for its ClassIDs until removal.
+ * 
+ * @deprecated in 4.0.0, there's no way to create custom PropertyIDMaps, therefore
+ *   this class is obsolete
  */
 @Internal
+@Deprecated
+@Removal(version="4.2.0")
 public class SectionIDMap {
 
     /**
-     * The default section ID map. It maps section format IDs to {@link PropertyIDMap PropertyIDMaps}
-     */
-    private static ThreadLocal<Map<ClassID,PropertyIDMap>> defaultMap =
-            new ThreadLocal<>();
-    
-    /**
-     * <p>The SummaryInformation's section's format ID.</p>
+     * The SummaryInformation's section's format ID.
+     * @deprecated use {@link SummaryInformation#FORMAT_ID}
      */
-    public static final ClassID SUMMARY_INFORMATION_ID =
-        new ClassID("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}");
+    @Deprecated
+    public static final ClassID SUMMARY_INFORMATION_ID = SummaryInformation.FORMAT_ID;
 
     /**
      * The DocumentSummaryInformation's first and second sections' format ID.
+     * @deprecated use {@link DocumentSummaryInformation#FORMAT_ID}
      */
-    private static final ClassID DOC_SUMMARY_INFORMATION =
-        new ClassID("{D5CDD502-2E9C-101B-9397-08002B2CF9AE}");    
-    private static final ClassID USER_DEFINED_PROPERTIES =
-        new ClassID("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}");
-    
-    public static final ClassID[] DOCUMENT_SUMMARY_INFORMATION_ID = {
-        DOC_SUMMARY_INFORMATION, USER_DEFINED_PROPERTIES
-    };
+    @Deprecated
+    public static final ClassID[] DOCUMENT_SUMMARY_INFORMATION_ID = DocumentSummaryInformation.FORMAT_ID;
 
     /**
      * A property without a known name is described by this string.
+     * @deprecated use {@link PropertyIDMap#UNDEFINED}
      */
-    public static final String UNDEFINED = "[undefined]";
-
-    /**
-     * <p>Returns the singleton instance of the default {@link
-     * SectionIDMap}.</p>
-     *
-     * @return The instance value
-     */
-    public static SectionIDMap getInstance() {
-        Map<ClassID,PropertyIDMap> m = defaultMap.get();
-        if (m == null) {
-            m = new HashMap<>();
-            m.put(SUMMARY_INFORMATION_ID, PropertyIDMap.getSummaryInformationProperties());
-            m.put(DOCUMENT_SUMMARY_INFORMATION_ID[0], PropertyIDMap.getDocumentSummaryInformationProperties());
-            defaultMap.set(m);
-        }
-        return new SectionIDMap();
-    }
-
-
-
-    /**
-     * <p>Returns the property ID string that is associated with a
-     * given property ID in a section format ID's namespace.</p>
-     *
-     * @param sectionFormatID Each section format ID has its own name
-     * space of property ID strings and thus must be specified.
-     * @param  pid The property ID
-     * @return The well-known property ID string associated with the
-     * property ID <var>pid</var> in the name space spanned by <var>
-     * sectionFormatID</var> . If the <var>pid</var>
-     * /<var>sectionFormatID </var> combination is not well-known, the
-     * string "[undefined]" is returned.
-     */
-    public static String getPIDString(ClassID sectionFormatID, long pid) {
-        final PropertyIDMap m = getInstance().get(sectionFormatID);
-        if (m == null) {
-            return UNDEFINED;
-        }
-        final String s = m.get(pid);
-        if (s == null) {
-            return UNDEFINED;
-        }
-        return s;
-    }
-
-
-
-    /**
-     * <p>Returns the {@link PropertyIDMap} for a given section format
-     * ID.</p>
-     *
-     * @param sectionFormatID the section format ID
-     * @return the property ID map
-     */
-    public PropertyIDMap get(final ClassID sectionFormatID) {
-        return getInstance().get(sectionFormatID);
-    }
-
-    /**
-     * Associates a section format ID with a {@link PropertyIDMap}.
-     *
-     * @param sectionFormatID the section format ID
-     * @param propertyIDMap the property ID map
-     * @return as defined by {@link java.util.Map#put}
-     */
-    public PropertyIDMap put(ClassID sectionFormatID, PropertyIDMap propertyIDMap) {
-        return getInstance().put(sectionFormatID, propertyIDMap);
-    }
-
-    /**
-     * Associates the string representation of a section format ID with a {@link PropertyIDMap}
-     * 
-     * @param key the key of the PropertyIDMap
-     * @param value the PropertyIDMap itself
-     * 
-     * @return the previous PropertyIDMap stored under this key, or {@code null} if there wasn't one
-     */
-    protected PropertyIDMap put(String key, PropertyIDMap value) {
-        return put(new ClassID(key), value);
-    }
+    @Deprecated
+    public static final String UNDEFINED = PropertyIDMap.UNDEFINED;
 }

Modified: poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java Fri Nov 24 01:02:20 2017
@@ -41,7 +41,7 @@ import org.apache.poi.hpsf.PropertySet;
 import org.apache.poi.hpsf.PropertySetFactory;
 import org.apache.poi.hpsf.Section;
 import org.apache.poi.hpsf.SummaryInformation;
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
+import org.apache.poi.hpsf.wellknown.PropertyIDMap;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -171,13 +171,13 @@ public final class TestBasic {
         final SummaryInformation si = (SummaryInformation)PropertySetFactory.create(is);
         final List<Section> sections = si.getSections();
         final Section s = sections.get(0);
-        assertEquals(s.getFormatID(), SectionIDMap.SUMMARY_INFORMATION_ID);
+        assertEquals(s.getFormatID(), SummaryInformation.FORMAT_ID);
         assertNotNull(s.getProperties());
         assertEquals(17, s.getPropertyCount());
-        assertEquals("Titel", s.getProperty(2));
+        assertEquals("Titel", s.getProperty(PropertyIDMap.PID_TITLE));
         assertEquals(1764, s.getSize());
     }
-    
+
     @Test
     public void bug52117LastPrinted() throws IOException, HPSFException {
         File f = samples.getFile("TestBug52117.doc");
@@ -189,4 +189,20 @@ public final class TestBasic {
         assertTrue(Filetime.isUndefined(lastPrinted));
         assertEquals(1800000000L, editTime);
     }
+
+    @Test
+    public void bug61809() throws IOException, HPSFException {
+        InputStream is_si = new ByteArrayInputStream(poiFiles.get(0).getBytes());
+        final SummaryInformation si = (SummaryInformation)PropertySetFactory.create(is_si);
+        final Section s_si = si.getSections().get(0);
+
+        assertEquals("PID_TITLE", s_si.getPIDString(PropertyIDMap.PID_TITLE));
+        assertEquals(PropertyIDMap.UNDEFINED, s_si.getPIDString(4711));
+
+        InputStream is_dsi = new ByteArrayInputStream(poiFiles.get(1).getBytes());
+        final DocumentSummaryInformation dsi = (DocumentSummaryInformation)PropertySetFactory.create(is_dsi);
+        final Section s_dsi = dsi.getSections().get(0);
+
+        assertEquals("PID_MANAGER", s_dsi.getPIDString(PropertyIDMap.PID_MANAGER));
+    }
 }

Modified: poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWrite.java Fri Nov 24 01:02:20 2017
@@ -42,9 +42,23 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.poi.POIDataSamples;
-import org.apache.poi.hpsf.*;
+import org.apache.poi.hpsf.ClassID;
+import org.apache.poi.hpsf.DocumentSummaryInformation;
+import org.apache.poi.hpsf.HPSFException;
+import org.apache.poi.hpsf.IllegalPropertySetDataException;
+import org.apache.poi.hpsf.NoFormatIDException;
+import org.apache.poi.hpsf.NoPropertySetStreamException;
+import org.apache.poi.hpsf.Property;
+import org.apache.poi.hpsf.PropertySet;
+import org.apache.poi.hpsf.PropertySetFactory;
+import org.apache.poi.hpsf.ReadingNotSupportedException;
+import org.apache.poi.hpsf.Section;
+import org.apache.poi.hpsf.SummaryInformation;
+import org.apache.poi.hpsf.UnsupportedVariantTypeException;
+import org.apache.poi.hpsf.Variant;
+import org.apache.poi.hpsf.VariantSupport;
+import org.apache.poi.hpsf.WritingNotSupportedException;
 import org.apache.poi.hpsf.wellknown.PropertyIDMap;
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
 import org.apache.poi.poifs.eventfilesystem.POIFSReader;
 import org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent;
 import org.apache.poi.poifs.eventfilesystem.POIFSReaderListener;
@@ -72,13 +86,6 @@ public class TestWrite {
 
     private static final String POI_FS = "TestHPSFWritingFunctionality.doc";
 
-    private static final int BYTE_ORDER = 0xfffe;
-    private static final int FORMAT     = 0x0000;
-    private static final int OS_VERSION = 0x00020A04;
-    private static final int[] SECTION_COUNT = {1, 2};
-    private static final boolean[] IS_SUMMARY_INFORMATION = {true, false};
-    private static final boolean[] IS_DOCUMENT_SUMMARY_INFORMATION = {false, true};
-
     private static final String IMPROPER_DEFAULT_CHARSET_MESSAGE =
         "Your default character set is " + getDefaultCharsetName() +
         ". However, this testcase must be run in an environment " +
@@ -147,7 +154,7 @@ public class TestWrite {
         final POIFSFileSystem poiFs = new POIFSFileSystem();
         final PropertySet ps = new PropertySet();
         final Section s = ps.getSections().get(0);
-        s.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);
+        s.setFormatID(SummaryInformation.FORMAT_ID);
 
         final ByteArrayOutputStream psStream = new ByteArrayOutputStream();
         ps.write(psStream);
@@ -194,7 +201,7 @@ public class TestWrite {
 
         final PropertySet ps = new PropertySet();
         final Section si = new Section();
-        si.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);
+        si.setFormatID(SummaryInformation.FORMAT_ID);
         ps.clearSections();
         ps.addSection(si);
 
@@ -414,7 +421,7 @@ public class TestWrite {
         final String TITLE = "This is a sample title";
         final PropertySet mps = new PropertySet();
         final Section ms = mps.getSections().get(0);
-        ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);
+        ms.setFormatID(SummaryInformation.FORMAT_ID);
         final Property p = new Property();
         p.setID(PropertyIDMap.PID_TITLE);
         p.setType(Variant.VT_LPSTR);
@@ -485,7 +492,7 @@ public class TestWrite {
         m.put(Long.valueOf(2), "String 2");
         m.put(Long.valueOf(3), "String 3");
         s.setDictionary(m);
-        s.setFormatID(SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID[0]);
+        s.setFormatID(DocumentSummaryInformation.FORMAT_ID[0]);
         int codepage = CodePageUtil.CP_UNICODE;
         s.setProperty(PropertyIDMap.PID_CODEPAGE, Variant.VT_I2, codepage);
         poiFs.createDocument(ps1.toInputStream(), "Test");
@@ -751,7 +758,7 @@ public class TestWrite {
 
         try {
             s.setDictionary(m);
-            s.setFormatID(SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID[0]);
+            s.setFormatID(DocumentSummaryInformation.FORMAT_ID[0]);
             int codepage = 12345;
             s.setProperty(PropertyIDMap.PID_CODEPAGE, Variant.VT_I2,
                           Integer.valueOf(codepage));

Modified: poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java?rev=1816205&r1=1816204&r2=1816205&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java Fri Nov 24 01:02:20 2017
@@ -34,8 +34,20 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.poi.POIDataSamples;
-import org.apache.poi.hpsf.*;
-import org.apache.poi.hpsf.wellknown.SectionIDMap;
+import org.apache.poi.hpsf.CustomProperties;
+import org.apache.poi.hpsf.CustomProperty;
+import org.apache.poi.hpsf.DocumentSummaryInformation;
+import org.apache.poi.hpsf.MarkUnsupportedException;
+import org.apache.poi.hpsf.NoPropertySetStreamException;
+import org.apache.poi.hpsf.Property;
+import org.apache.poi.hpsf.PropertySet;
+import org.apache.poi.hpsf.PropertySetFactory;
+import org.apache.poi.hpsf.Section;
+import org.apache.poi.hpsf.SummaryInformation;
+import org.apache.poi.hpsf.UnexpectedPropertySetTypeException;
+import org.apache.poi.hpsf.Variant;
+import org.apache.poi.hpsf.VariantSupport;
+import org.apache.poi.hpsf.WritingNotSupportedException;
 import org.apache.poi.poifs.filesystem.DocumentInputStream;
 import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
 import org.apache.poi.util.IOUtils;
@@ -562,7 +574,7 @@ public class TestWriteWellKnown {
 
         /* Test an empty custom properties set. */
         s = new Section();
-        s.setFormatID(SectionIDMap.DOCUMENT_SUMMARY_INFORMATION_ID[1]);
+        s.setFormatID(DocumentSummaryInformation.FORMAT_ID[1]);
         // s.setCodepage(CodePageUtil.CP_UNICODE);
         dsi.addSection(s);
         cps = dsi.getCustomProperties();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org