From 1490cf67edc42ffd2abd6230f0caebebaf832a96 Mon Sep 17 00:00:00 2001 From: Emmanuel Odeke Date: Tue, 27 Jun 2017 00:47:17 -0600 Subject: [PATCH] net/http: implement sniffing for some fonts Implement sniffing for fonts: * MS Font object --> "application/vnd.ms-fontobject" * ttf --> "application/font-ttf" * off --> "application/font-off" * otf --> "application/font-off" * cff --> "application/font-cff" * woff --> "application/font-woff" Fixes #20808 Change-Id: Ibe02a87d3c9d610c6a30e1b6c03f4e520404e70f Reviewed-on: https://go-review.googlesource.com/47553 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/net/http/sniff.go | 15 +++++++++++++++ src/net/http/sniff_test.go | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/net/http/sniff.go b/src/net/http/sniff.go index ecc65e4de6..365a36c79e 100644 --- a/src/net/http/sniff.go +++ b/src/net/http/sniff.go @@ -91,6 +91,7 @@ var sniffSignatures = []sniffSig{ ct: "image/webp", }, &exactSig{[]byte("\x00\x00\x01\x00"), "image/vnd.microsoft.icon"}, + &maskedSig{ mask: []byte("\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF"), pat: []byte("RIFF\x00\x00\x00\x00WAVE"), @@ -126,6 +127,20 @@ var sniffSignatures = []sniffSig{ pat: []byte("RIFF\x00\x00\x00\x00AVI "), ct: "video/avi", }, + + // Fonts + &maskedSig{ + // 34 NULL bytes followed by the string "LP" + pat: []byte("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4C\x50"), + // 34 NULL bytes followed by \xF\xF + mask: []byte("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"), + ct: "application/vnd.ms-fontobject", + }, + &exactSig{[]byte("\x00\x01\x00\x00"), "application/font-ttf"}, + &exactSig{[]byte("OTTO"), "application/font-off"}, + &exactSig{[]byte("ttcf"), "application/font-cff"}, + &exactSig{[]byte("wOFF"), "application/font-woff"}, + &exactSig{[]byte("\x1A\x45\xDF\xA3"), "video/webm"}, &exactSig{[]byte("\x52\x61\x72\x20\x1A\x07\x00"), "application/x-rar-compressed"}, &exactSig{[]byte("\x50\x4B\x03\x04"), "application/zip"}, diff --git a/src/net/http/sniff_test.go b/src/net/http/sniff_test.go index c7622531df..91fe12338c 100644 --- a/src/net/http/sniff_test.go +++ b/src/net/http/sniff_test.go @@ -54,6 +54,17 @@ var sniffTests = []struct { {"MP4 video", []byte("\x00\x00\x00\x18ftypmp42\x00\x00\x00\x00mp42isom<\x06t\xbfmdat"), "video/mp4"}, {"AVI video #1", []byte("RIFF,O\n\x00AVI LISTÀ"), "video/avi"}, {"AVI video #2", []byte("RIFF,\n\x00\x00AVI LISTÀ"), "video/avi"}, + + // Font types. + // {"MS.FontObject", []byte("\x00\x00")}, + {"TTF sample I", []byte("\x00\x01\x00\x00\x00\x17\x01\x00\x00\x04\x01\x60\x4f"), "application/font-ttf"}, + {"TTF sample II", []byte("\x00\x01\x00\x00\x00\x0e\x00\x80\x00\x03\x00\x60\x46"), "application/font-ttf"}, + + {"OTTO sample I", []byte("\x4f\x54\x54\x4f\x00\x0e\x00\x80\x00\x03\x00\x60\x42\x41\x53\x45"), "application/font-off"}, + + {"woff sample I", []byte("\x77\x4f\x46\x46\x00\x01\x00\x00\x00\x00\x30\x54\x00\x0d\x00\x00"), "application/font-woff"}, + // Woff2 is not yet recognized, change this test once mime-sniff working group adds woff2 + {"woff2 not recognized", []byte("\x77\x4f\x46\x32\x00\x01\x00\x00\x00"), "application/octet-stream"}, } func TestDetectContentType(t *testing.T) { -- 2.48.1