Browse code

< character wasn't being written to the script file

git-svn: trunk@2349

Nigel Horne authored on 2006/10/08 22:45:10
Showing 1 changed files
... ...
@@ -19,7 +19,7 @@
19 19
  * Save the JavaScript embedded in an HTML file, then run the script, saving
20 20
  * the output in a file that is to be scanned, then remove the script file
21 21
  */
22
-static	char	const	rcsid[] = "$Id: js.c,v 1.3 2006/10/08 12:57:06 njh Exp $";
22
+static	char	const	rcsid[] = "$Id: js.c,v 1.4 2006/10/08 13:45:10 njh Exp $";
23 23
 
24 24
 #if HAVE_CONFIG_H
25 25
 #include "clamav-config.h"
... ...
@@ -64,9 +64,10 @@ cli_scanjs(const char *dir, int desc)
64 64
 	char *buf;	/* start of memory mapped area */
65 65
 	const char *p;
66 66
 	long bytesleft;
67
-	int done_header;
67
+	int done_header, rc;
68 68
 	FILE *fout;
69 69
 	char script_filename[NAME_MAX + 1];
70
+	extern short cli_leavetemps_flag;
70 71
 
71 72
 	cli_dbgmsg("in cli_scanjs(%s)\n", dir);
72 73
 
... ...
@@ -95,14 +96,17 @@ cli_scanjs(const char *dir, int desc)
95 95
 	while(p < &buf[size]) {
96 96
 		const char *q = cli_pmemstr(p, bytesleft, "<script", 7);
97 97
 
98
-		if(q != NULL)
98
+		if(q == NULL)
99 99
 			/* TODO: full case independant search */
100 100
 			q = cli_pmemstr(p, bytesleft, "<SCRIPT", 7);
101 101
 
102 102
 		if(q == NULL)
103 103
 			break;
104 104
 
105
-		/* TODO: check language is javascript */
105
+		/*
106
+		 * TODO: check language is javascript
107
+		 * TODO: follow src if mail-follow-urls is set
108
+		 */
106 109
 
107 110
 		bytesleft -= (q - p);
108 111
 		p = q;
... ...
@@ -118,6 +122,8 @@ cli_scanjs(const char *dir, int desc)
118 118
 		bytesleft--;
119 119
 
120 120
 		while(bytesleft) {
121
+			char c;
122
+
121 123
 			if(*p == '<') {
122 124
 				p++;
123 125
 				if(--bytesleft == 0)
... ...
@@ -138,7 +144,13 @@ cli_scanjs(const char *dir, int desc)
138 138
 					}
139 139
 					break;
140 140
 				}
141
+				c = '<';
142
+			} else {
143
+				c = tolower(*p);
144
+				p++;
145
+				bytesleft--;
141 146
 			}
147
+
142 148
 			if(!done_header) {
143 149
 				int fd;
144 150
 
... ...
@@ -171,26 +183,44 @@ cli_scanjs(const char *dir, int desc)
171 171
 					munmap(buf, size);
172 172
 					return CL_ETMPFILE;
173 173
 				}
174
+				/*
175
+				 * FIXME: the script file could already contain
176
+				 *	main()
177
+				 */
174 178
 				fputs("function main()\n{\n", fout);
179
+				cli_dbgmsg("Saving javascript to %s\n",
180
+					script_filename);
175 181
 				done_header = 1;
176 182
 			}
177
-			putc(tolower(*p), fout);
178
-
179
-			p++;
180
-			bytesleft--;
183
+			putc(c, fout);
181 184
 		}
182 185
 	}
183 186
 
187
+	rc = CL_SUCCESS;
188
+
184 189
 	if(!done_header)
185 190
 		cli_dbgmsg("No javascript was detected\n");
186 191
 	else if(fout == NULL)
187 192
 		cli_errmsg("cli_scanjs: fout == NULL\n");
188 193
 	else {
194
+		/*JSInterpPtr interp = create_interp();*/
195
+
189 196
 		fputs("\n}\nmain();\n", fout);
190 197
 		fclose(fout);
191
-		/* TODO: NGS on the script file */
198
+
199
+		/*
200
+		 * Run NGS on the file
201
+		 */
202
+		/*
203
+		if(!js_eval_file(interp, script_filename)) {
204
+			cli_warnmsg("JS failed: %s\n", js_error_message(interp));
205
+			rc = CL_EIO;
206
+		}
207
+		js_destroy_interp(interp);*/
192 208
 	}
193
-	unlink(script_filename);
209
+
210
+	if(!cli_leavetemps_flag)
211
+		unlink(script_filename);
194 212
 
195 213
 	munmap(buf, size);
196 214
 	return CL_CLEAN;