]> granicus.if.org Git - file/commitdiff
PR/268: Account for different placement of [Content_types].xml by libreoffice.
authorChristos Zoulas <christos@zoulas.com>
Thu, 12 Sep 2013 16:08:07 +0000 (16:08 +0000)
committerChristos Zoulas <christos@zoulas.com>
Thu, 12 Sep 2013 16:08:07 +0000 (16:08 +0000)
magic/Magdir/msooxml

index ad0ea7687952fa9921b1a64aba2636704cfacccc..ce5268e60ae2e9fbbbb6c3c62a4784a0c692d69c 100644 (file)
@@ -1,35 +1,41 @@
 
 #------------------------------------------------------------------------------
-# $File: matroska,v 1.6 2010/09/20 21:11:35 rrt Exp $
+# $File: msooxml,v 1.2 2013/01/25 23:04:37 christos Exp $
 # msooxml:  file(1) magic for Microsoft Office XML
 # From: Ralf Brown <ralf.brown@gmail.com>
 
 # .docx, .pptx, and .xlsx are XML plus other files inside a ZIP
 #   archive.  The first member file is normally "[Content_Types].xml".
+#   but some libreoffice generated files put this later. Perhaps skip
+#   the "[Content_Types].xml" test?
 # Since MSOOXML doesn't have anything like the uncompressed "mimetype"
 #   file of ePub or OpenDocument, we'll have to scan for a filename
 #   which can distinguish between the three types
 
 # start by checking for ZIP local file header signature
-0               string          PK\003\004
+0              string          PK\003\004
+!:strength +10
 # make sure the first file is correct
->0x1E           string          [Content_Types].xml
+>0x1E          string          [Content_Types].xml
+>>0            use             msooxml
+>0xE84         string          [Content_Types].xml
+>>0            use             msooxml
+
+0              name            msooxml
 # skip to the second local file header
-#   since some documents include a 520-byte extra field following the file
-#   header,  we need to scan for the next header
->>(18.l+49)     search/2000     PK\003\004
+# since some documents include a 520-byte extra field following the file
+# header, we need to scan for the next header
+>(18.l+49)     search/2000     PK\003\004
 # now skip to the *third* local file header; again, we need to scan due to a
-#   520-byte extra field following the file header
->>>&26          search/1000     PK\003\004
+# 520-byte extra field following the file header
+>>&26          search/1000     PK\003\004
 # and check the subdirectory name to determine which type of OOXML
-#   file we have
-#   Correct the mimetype with the registered ones:
-#     http://technet.microsoft.com/en-us/library/cc179224.aspx
->>>>&26         string          word/           Microsoft Word 2007+
+# file we have.  Correct the mimetype with the registered ones:
+# http://technet.microsoft.com/en-us/library/cc179224.aspx
+>>>&26         string          word/           Microsoft Word 2007+
 !:mime application/vnd.openxmlformats-officedocument.wordprocessingml.document
->>>>&26         string          ppt/            Microsoft PowerPoint 2007+
+>>>&26         string          ppt/            Microsoft PowerPoint 2007+
 !:mime application/vnd.openxmlformats-officedocument.presentationml.presentation
->>>>&26         string          xl/             Microsoft Excel 2007+
+>>>&26         string          xl/             Microsoft Excel 2007+
 !:mime application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
->>>>&26         default         x               Microsoft OOXML
-!:strength +10
+>>>&26         default         x               Microsoft OOXML