From 39fd38a81c489a9b6b765f28b40a8d1b87bf3a2c Mon Sep 17 00:00:00 2001 From: turn88 Date: Wed, 10 Jul 2019 11:10:39 +0800 Subject: [PATCH 1/4] add matchers for office 2003 add mathers for office2003, detect the MIME type of a .doc/.xls/.ppt file --- matchers/document.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/matchers/document.go b/matchers/document.go index 7e1ef85..30d71c2 100644 --- a/matchers/document.go +++ b/matchers/document.go @@ -34,13 +34,12 @@ const ( TYPE_PPTX TYPE_OOXML ) - +//reference: https://bz.apache.org/ooo/show_bug.cgi?id=111457 func Doc(buf []byte) bool { - return len(buf) > 7 && + return len(buf) > 513 && buf[0] == 0xD0 && buf[1] == 0xCF && buf[2] == 0x11 && buf[3] == 0xE0 && - buf[4] == 0xA1 && buf[5] == 0xB1 && - buf[6] == 0x1A && buf[7] == 0xE1 + buf[512] == 0xEC && buf[513] == 0xA5 } func Docx(buf []byte) bool { @@ -52,8 +51,7 @@ func Xls(buf []byte) bool { return len(buf) > 7 && buf[0] == 0xD0 && buf[1] == 0xCF && buf[2] == 0x11 && buf[3] == 0xE0 && - buf[4] == 0xA1 && buf[5] == 0xB1 && - buf[6] == 0x1A && buf[7] == 0xE1 + buf[512] == 0x09 && buf[513] == 0x08 } func Xlsx(buf []byte) bool { @@ -65,8 +63,7 @@ func Ppt(buf []byte) bool { return len(buf) > 7 && buf[0] == 0xD0 && buf[1] == 0xCF && buf[2] == 0x11 && buf[3] == 0xE0 && - buf[4] == 0xA1 && buf[5] == 0xB1 && - buf[6] == 0x1A && buf[7] == 0xE1 + buf[512] == 0xA0 && buf[513] == 0x46 } func Pptx(buf []byte) bool { From 49ea87d623caff1737430e0ebc017f81357aeab9 Mon Sep 17 00:00:00 2001 From: turn88 Date: Wed, 10 Jul 2019 11:14:51 +0800 Subject: [PATCH 2/4] Update document.go --- matchers/document.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matchers/document.go b/matchers/document.go index 30d71c2..fac16de 100644 --- a/matchers/document.go +++ b/matchers/document.go @@ -48,7 +48,7 @@ func Docx(buf []byte) bool { } func Xls(buf []byte) bool { - return len(buf) > 7 && + return len(buf) > 513 && buf[0] == 0xD0 && buf[1] == 0xCF && buf[2] == 0x11 && buf[3] == 0xE0 && buf[512] == 0x09 && buf[513] == 0x08 @@ -60,7 +60,7 @@ func Xlsx(buf []byte) bool { } func Ppt(buf []byte) bool { - return len(buf) > 7 && + return len(buf) > 513 && buf[0] == 0xD0 && buf[1] == 0xCF && buf[2] == 0x11 && buf[3] == 0xE0 && buf[512] == 0xA0 && buf[513] == 0x46 From 9c6cd48ff0dc1614a1615f1acff07dcc6cc93c71 Mon Sep 17 00:00:00 2001 From: turn88 Date: Wed, 10 Jul 2019 11:46:30 +0800 Subject: [PATCH 3/4] Update document.go --- matchers/document.go | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/matchers/document.go b/matchers/document.go index fac16de..6b13a0d 100644 --- a/matchers/document.go +++ b/matchers/document.go @@ -36,10 +36,15 @@ const ( ) //reference: https://bz.apache.org/ooo/show_bug.cgi?id=111457 func Doc(buf []byte) bool { - return len(buf) > 513 && - buf[0] == 0xD0 && buf[1] == 0xCF && - buf[2] == 0x11 && buf[3] == 0xE0 && - buf[512] == 0xEC && buf[513] == 0xA5 + if len(buf) > 513 { + return buf[0] == 0xD0 && buf[1] == 0xCF && + buf[2] == 0x11 && buf[3] == 0xE0 && + buf[512] == 0xEC && buf[513] == 0xA5 + } else { + return len(buf) > 3 && + buf[0] == 0xD0 && buf[1] == 0xCF && + buf[2] == 0x11 && buf[3] == 0xE0 + } } func Docx(buf []byte) bool { @@ -48,10 +53,15 @@ func Docx(buf []byte) bool { } func Xls(buf []byte) bool { - return len(buf) > 513 && - buf[0] == 0xD0 && buf[1] == 0xCF && - buf[2] == 0x11 && buf[3] == 0xE0 && - buf[512] == 0x09 && buf[513] == 0x08 + if len(buf) > 513 { + return buf[0] == 0xD0 && buf[1] == 0xCF && + buf[2] == 0x11 && buf[3] == 0xE0 && + buf[512] == 0x09 && buf[513] == 0x08 + } else { + return len(buf) > 3 && + buf[0] == 0xD0 && buf[1] == 0xCF && + buf[2] == 0x11 && buf[3] == 0xE0 + } } func Xlsx(buf []byte) bool { @@ -59,11 +69,16 @@ func Xlsx(buf []byte) bool { return ok && typ == TYPE_XLSX } -func Ppt(buf []byte) bool { - return len(buf) > 513 && - buf[0] == 0xD0 && buf[1] == 0xCF && - buf[2] == 0x11 && buf[3] == 0xE0 && - buf[512] == 0xA0 && buf[513] == 0x46 +func Ppt(buf []byte) bool { + if len(buf) > 513 { + return buf[0] == 0xD0 && buf[1] == 0xCF && + buf[2] == 0x11 && buf[3] == 0xE0 && + buf[512] == 0xA0 && buf[513] == 0x46 + } else { + return len(buf) > 3 && + buf[0] == 0xD0 && buf[1] == 0xCF && + buf[2] == 0x11 && buf[3] == 0xE0 + } } func Pptx(buf []byte) bool { From b7d8325bfcab09fa3efefc71e3049acc4f363a4a Mon Sep 17 00:00:00 2001 From: turn88 Date: Wed, 10 Jul 2019 18:00:11 +0800 Subject: [PATCH 4/4] Update document.go --- matchers/document.go | 51 ++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/matchers/document.go b/matchers/document.go index 6b13a0d..892d209 100644 --- a/matchers/document.go +++ b/matchers/document.go @@ -34,17 +34,18 @@ const ( TYPE_PPTX TYPE_OOXML ) + //reference: https://bz.apache.org/ooo/show_bug.cgi?id=111457 func Doc(buf []byte) bool { - if len(buf) > 513 { + if len(buf) > 513 { return buf[0] == 0xD0 && buf[1] == 0xCF && - buf[2] == 0x11 && buf[3] == 0xE0 && - buf[512] == 0xEC && buf[513] == 0xA5 - } else { - return len(buf) > 3 && - buf[0] == 0xD0 && buf[1] == 0xCF && - buf[2] == 0x11 && buf[3] == 0xE0 - } + buf[2] == 0x11 && buf[3] == 0xE0 && + buf[512] == 0xEC && buf[513] == 0xA5 + } else { + return len(buf) > 3 && + buf[0] == 0xD0 && buf[1] == 0xCF && + buf[2] == 0x11 && buf[3] == 0xE0 + } } func Docx(buf []byte) bool { @@ -53,15 +54,15 @@ func Docx(buf []byte) bool { } func Xls(buf []byte) bool { - if len(buf) > 513 { + if len(buf) > 513 { return buf[0] == 0xD0 && buf[1] == 0xCF && - buf[2] == 0x11 && buf[3] == 0xE0 && - buf[512] == 0x09 && buf[513] == 0x08 - } else { - return len(buf) > 3 && - buf[0] == 0xD0 && buf[1] == 0xCF && - buf[2] == 0x11 && buf[3] == 0xE0 - } + buf[2] == 0x11 && buf[3] == 0xE0 && + buf[512] == 0x09 && buf[513] == 0x08 + } else { + return len(buf) > 3 && + buf[0] == 0xD0 && buf[1] == 0xCF && + buf[2] == 0x11 && buf[3] == 0xE0 + } } func Xlsx(buf []byte) bool { @@ -69,16 +70,16 @@ func Xlsx(buf []byte) bool { return ok && typ == TYPE_XLSX } -func Ppt(buf []byte) bool { - if len(buf) > 513 { +func Ppt(buf []byte) bool { + if len(buf) > 513 { return buf[0] == 0xD0 && buf[1] == 0xCF && - buf[2] == 0x11 && buf[3] == 0xE0 && - buf[512] == 0xA0 && buf[513] == 0x46 - } else { - return len(buf) > 3 && - buf[0] == 0xD0 && buf[1] == 0xCF && - buf[2] == 0x11 && buf[3] == 0xE0 - } + buf[2] == 0x11 && buf[3] == 0xE0 && + buf[512] == 0xA0 && buf[513] == 0x46 + } else { + return len(buf) > 3 && + buf[0] == 0xD0 && buf[1] == 0xCF && + buf[2] == 0x11 && buf[3] == 0xE0 + } } func Pptx(buf []byte) bool {