Browse code

Better detection of Binhex encoded EICAR

git-svn: trunk@2022

Nigel Horne authored on 2006/06/12 22:25:21
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Mon Jun 12 14:24:35 BST 2006 (njh)
2
+----------------------------------
3
+  * libclamav/message.c:	Better detection of binhex encoded EICAR
4
+
1 5
 Mon Jun 12 10:56:52 BST 2006 (njh)
2 6
 ----------------------------------
3 7
   * clamav-milter:	Fix bug in code from 5/5/06
... ...
@@ -16,7 +16,7 @@
16 16
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 17
  *  MA 02110-1301, USA.
18 18
  */
19
-static	char	const	rcsid[] = "$Id: message.c,v 1.173 2006/06/11 14:31:40 njh Exp $";
19
+static	char	const	rcsid[] = "$Id: message.c,v 1.174 2006/06/12 13:24:06 njh Exp $";
20 20
 
21 21
 #if HAVE_CONFIG_H
22 22
 #include "clamav-config.h"
... ...
@@ -1032,7 +1032,7 @@ messageExport(message *m, const char *dir, void *(*create)(void), void (*destroy
1032 1032
 
1033 1033
 	if((t_line = binhexBegin(m)) != NULL) {
1034 1034
 		unsigned char byte;
1035
-		unsigned long newlen = 0L, len, l;
1035
+		unsigned long newlen = 0L, len, dataforklen, resourceforklen, l;
1036 1036
 		unsigned char *data;
1037 1037
 		char *ptr;
1038 1038
 		int bytenumber;
... ...
@@ -1267,13 +1267,18 @@ messageExport(message *m, const char *dir, void *(*create)(void), void (*destroy
1267 1267
 		/*
1268 1268
 		 * Set len to be the data fork length
1269 1269
 		 */
1270
-		len = ((data[byte] << 24) & 0xFF000000) |
1270
+		dataforklen = ((data[byte] << 24) & 0xFF000000) |
1271 1271
 		      ((data[byte + 1] << 16) & 0xFF0000) |
1272 1272
 		      ((data[byte + 2] << 8) & 0xFF00) |
1273 1273
 		      (data[byte + 3] & 0xFF);
1274 1274
 
1275
-		cli_dbgmsg("Filename = '%s', data fork length = %lu bytes\n",
1276
-			filename, len);
1275
+		resourceforklen = ((data[byte + 4] << 24) & 0xFF000000) |
1276
+		      ((data[byte + 5] << 16) & 0xFF0000) |
1277
+		      ((data[byte + 6] << 8) & 0xFF00) |
1278
+		      (data[byte + 7] & 0xFF);
1279
+
1280
+		cli_dbgmsg("Filename = '%s', data fork length = %lu, resource fork length = %lu bytes\n",
1281
+			filename, dataforklen, resourceforklen);
1277 1282
 
1278 1283
 		free((char *)filename);
1279 1284
 
... ...
@@ -1284,15 +1289,15 @@ messageExport(message *m, const char *dir, void *(*create)(void), void (*destroy
1284 1284
 
1285 1285
 		l = blobGetDataSize(tmp) - byte;
1286 1286
 
1287
-		if(l < len) {
1287
+		if(l < dataforklen) {
1288 1288
 			cli_warnmsg("Corrupt BinHex file, claims it is %lu bytes long in a message of %lu bytes\n",
1289
-				len, l);
1290
-			len = l;
1289
+				dataforklen, l);
1290
+			dataforklen = l;
1291 1291
 		}
1292 1292
 		if(setCTX && m->ctx)
1293 1293
 			(*setCTX)(ret, m->ctx);
1294 1294
 
1295
-		(*addData)(ret, &data[byte], len);
1295
+		(*addData)(ret, &data[byte], dataforklen);
1296 1296
 
1297 1297
 		blobDestroy(tmp);
1298 1298