5 Appendix A: Product Behavior

The information in this specification is applicable to the following Microsoft products or supplemental software. References to product versions include updates to those products.

  • Microsoft Office 2010 suites

  • Microsoft Office 2013

  • Microsoft SharePoint Server 2010

  • Microsoft SharePoint Server 2013

  • Microsoft SharePoint Workspace 2010

  • Windows 8.1 Update

  • Microsoft Office 2016

  • Windows 10 operating system

  • Microsoft SharePoint Server 2016

  • Microsoft Office 2019

  • Microsoft SharePoint Server 2019

  • Microsoft Office 2021

  • Microsoft SharePoint Server Subscription Edition

  • Microsoft Office 2024 Preview

Exceptions, if any, are noted in this section. If an update version, service pack or Knowledge Base (KB) number appears with a product name, the behavior changed in that update. The new behavior also applies to subsequent updates unless otherwise specified. If a product edition appears with the product version, behavior is different in that product edition.

Unless otherwise specified, any statement of optional behavior in this specification that is prescribed using the terms "SHOULD" or "SHOULD NOT" implies product behavior in accordance with the SHOULD or SHOULD NOT prescription. Unless otherwise specified, the term "MAY" implies that the product does not follow the prescription.

<1> Section 2.2.2:  If there is only one object in the file, Microsoft SharePoint Server 2010 does not return the Intermediate Node Object, but a Leaf Node Object at the beginning.

<2> Section 2.2.3.1:  SharePoint Server 2010 and SharePoint Server 2013 do not support the Data Hash Header.

<3> Section 2.2.3.1:  The Data Hash computation is as follows:

A quick, simple non-cryptographic hash algorithm that works by XORing the bytes in a circular-shifting fashion.

A high level description of the algorithm without the introduction of the length is as follows:

Let's say a "block" is a 20-byte array.

 method block zero():
   returns a block with all zero bits.
  
 method block reverse(block b)
   returns a block with all of the bytes reversed (00010203... => ...03020100)
  
 method block extend8(byte b):
   returns a block with all zero bits except for the lower 8 bits which come from b.
  
 method block extend64(int64 i):
   returns a block of all zero bits except for the lower 64 bits which come from i
   and are in little-endian byte order.
  
 method block rotate(block bl, int n):
   returns bl rotated left by n bits.
  
 method block xor(block bl1, block bl2):
   returns a bitwise xor of bl1 with bl2
  
 method block XorHash0(byte[] rgb):
   block ret = zero()
   for (int i = 0; i < rgb.Length; i ++)
     ret = xor(ret, rotate(extend8(rgb[i]), i * 11))
   returns reverse(ret)

<4> Section 2.4.1:  The signature is stored in the Leaf node corresponding to the local file header chunk.

<5> Section 2.4.1:  The signature is stored in the node corresponding to the data file chunk which is a child of the root Intermediate node.

<6> Section 2.4.1:  Office 2010 March 2015 CU adds an additional unsigned 32-bit integer, which specifies the CRC of the compressed data, after CRC field.

<7> Section 2.4.1:  This sequence of bytes is randomly generated in Microsoft products.

<8> Section 2.4.1:  For SharePoint Server 2010, if the number of .ZIP file bytes represented by a chunk is greater than 1 megabyte, a list of subchunks is generated. Each subchunk represents a sequential chunk of the .ZIP file data. The size of each subchunk is at most 1 megabyte. All but the last subchunk is 1 megabyte in size.

<9> Section 2.4.1:  This sequence of bytes is randomly generated in Microsoft products.

<10> Section 2.4.2:  SharePoint Server 2010 performs the RDC analysis if the file size is more than or equal to 32768 bytes and less than 262,144,000 bytes.