Browse code

MHTML: added filetype and switch case

Kevin Lin authored on 2016/05/03 06:32:03
Showing 4 changed files
... ...
@@ -126,6 +126,7 @@ static const struct ftmap_s {
126 126
     { "CL_TYPE_XML_HWP",	CL_TYPE_XML_HWP		},
127 127
     { "CL_TYPE_HWPOLE2",	CL_TYPE_HWPOLE2		},
128 128
     { "CL_TYPE_OOXML_HWP",	CL_TYPE_OOXML_HWP	},
129
+    { "CL_TYPE_MHTML",		CL_TYPE_MHTML		},
129 130
     { NULL,			CL_TYPE_IGNORED		}
130 131
 };
131 132
 
... ...
@@ -114,6 +114,7 @@ typedef enum {
114 114
     CL_TYPE_XML_XL,
115 115
     CL_TYPE_XML_HWP,
116 116
     CL_TYPE_HWPOLE2,
117
+    CL_TYPE_MHTML,
117 118
 
118 119
     CL_TYPE_OTHER, /* on-the-fly, used for target 14 (OTHER) */
119 120
     CL_TYPE_IGNORED /* please don't add anything below */
... ...
@@ -193,6 +193,8 @@ static const char *ftypes_int[] = {
193 193
   "0:4:d0cf11e0a1b11ae1:HWP embedded OLE2:CL_TYPE_ANY:CL_TYPE_HWPOLE2",
194 194
   "0:0:48575020446f63756d656e742046696c652056332e3030201a0102030405:HWP 3.x Document:CL_TYPE_ANY:CL_TYPE_HWP3:82",
195 195
   "1:0:efbbbf3c3f786d6c2076657273696f6e3d22312e3022*3c4857504d4c:HWPML Document:CL_TYPE_ANY:CL_TYPE_XML_HWP:82",
196
+  "1:0:(4d|6d)(49|69)(4d|6d)(45|65)2d(56|76)657273696f6e3a20{-1024}0a(43|63)6f6e74656e742d(54|74)7970653a20:MHTML file:CL_TYPE_ANY:CL_TYPE_MHTML:83",
197
+  "1:*:0a(4d|6d)(49|69)(4d|6d)(45|65)2d(56|76)657273696f6e3a20{-1024}0a(43|63)6f6e74656e742d(54|74)7970653a20:MHTML file:CL_TYPE_ANY:CL_TYPE_MHTML:83",
196 198
   NULL
197 199
 };
198 200
 
... ...
@@ -2268,6 +2268,14 @@ static int cli_scanraw(cli_ctx *ctx, cli_file_t type, uint8_t typercg, cli_file_
2268 2268
 
2269 2269
         while(fpt) {
2270 2270
             if(fpt->offset) switch(fpt->type) {
2271
+                case CL_TYPE_MHTML:
2272
+                    ctx->container_type = CL_TYPE_MHTML;
2273
+                    if(SCAN_MAIL && (DCONF_MAIL & MAIL_CONF_MBOX)) {
2274
+                        cli_dbgmsg("MHTML signature found at %u\n", (unsigned int) fpt->offset);
2275
+                        ret = cli_scanmail(ctx);
2276
+                    }
2277
+                    break;
2278
+
2271 2279
                 case CL_TYPE_XDP:
2272 2280
                     if(SCAN_PDF && (DCONF_DOC & DOC_CONF_PDF)) {
2273 2281
                         cli_dbgmsg("XDP signature found at %u\n", (unsigned int) fpt->offset);
... ...
@@ -3027,6 +3035,12 @@ static int magic_scandesc(cli_ctx *ctx, cli_file_t type)
3027 3027
 		ret = cli_scanmail(ctx);
3028 3028
 	    break;
3029 3029
 
3030
+	case CL_TYPE_MHTML:
3031
+	    ctx->container_type = CL_TYPE_MHTML;
3032
+	    if(SCAN_MAIL && (DCONF_MAIL & MAIL_CONF_MBOX))
3033
+		ret = cli_scanmail(ctx);
3034
+	    break;
3035
+
3030 3036
 	case CL_TYPE_TNEF:
3031 3037
 	    if(SCAN_MAIL && (DCONF_MAIL & MAIL_CONF_TNEF))
3032 3038
 		ret = cli_scantnef(ctx);