author | Srinivasa Sarva <srinivasa.sarva@oracle.com> |
Tue, 20 Dec 2011 22:26:25 -0800 | |
branch | s11-sru |
changeset 2238 | cc3545c342fd |
permissions | -rw-r--r-- |
2238
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
1 |
--- squid-3.1.8/src/gopher.cc 2010-09-03 20:25:58.000000000 -0700 |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
2 |
+++ squid-3.1.8/src/gopher.cc 2011-12-02 22:18:46.000000000 -0800 |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
3 |
@@ -425,7 +425,6 @@ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
4 |
return; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
5 |
} |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
6 |
|
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
7 |
- inbuf[len] = '\0'; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
8 |
String outbuf; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
9 |
|
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
10 |
if (!gopherState->HTML_header_added) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
11 |
@@ -441,75 +440,40 @@ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
12 |
gopherState->HTML_pre = 1; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
13 |
} |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
14 |
|
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
15 |
- while ((pos != NULL) && (pos < inbuf + len)) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
16 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
17 |
+ while (pos < inbuf + len) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
18 |
+ int llen; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
19 |
+ int left = len - (pos - inbuf); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
20 |
+ lpos = (char *)memchr(pos, '\n', left); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
21 |
+ if (lpos) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
22 |
+ lpos++; /* Next line is after \n */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
23 |
+ llen = lpos - pos; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
24 |
+ } else { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
25 |
+ llen = left; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
26 |
+ } |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
27 |
+ if (gopherState->len + llen >= TEMP_BUF_SIZE) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
28 |
+ debugs(10, 1, "GopherHTML: Buffer overflow. Lost some data on URL: " << entry->url() ); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
29 |
+ llen = TEMP_BUF_SIZE - gopherState->len - 1; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
30 |
+ } |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
31 |
+ if (!lpos) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
32 |
+ /* there is no complete line in inbuf */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
33 |
+ /* copy it to temp buffer */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
34 |
+ /* note: llen is adjusted above */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
35 |
+ xmemcpy(gopherState->buf + gopherState->len, pos, llen); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
36 |
+ gopherState->len += llen; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
37 |
+ break; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
38 |
+ } |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
39 |
if (gopherState->len != 0) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
40 |
/* there is something left from last tx. */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
41 |
- xstrncpy(line, gopherState->buf, gopherState->len + 1); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
42 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
43 |
- if (gopherState->len + len > TEMP_BUF_SIZE) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
44 |
- debugs(10, 1, "GopherHTML: Buffer overflow. Lost some data on URL: " << entry->url() ); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
45 |
- len = TEMP_BUF_SIZE - gopherState->len; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
46 |
- } |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
47 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
48 |
- lpos = (char *) memccpy(line + gopherState->len, inbuf, '\n', len); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
49 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
50 |
- if (lpos) |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
51 |
- *lpos = '\0'; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
52 |
- else { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
53 |
- /* there is no complete line in inbuf */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
54 |
- /* copy it to temp buffer */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
55 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
56 |
- if (gopherState->len + len > TEMP_BUF_SIZE) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
57 |
- debugs(10, 1, "GopherHTML: Buffer overflow. Lost some data on URL: " << entry->url() ); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
58 |
- len = TEMP_BUF_SIZE - gopherState->len; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
59 |
- } |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
60 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
61 |
- xmemcpy(gopherState->buf + gopherState->len, inbuf, len); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
62 |
- gopherState->len += len; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
63 |
- return; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
64 |
- } |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
65 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
66 |
- /* skip one line */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
67 |
- pos = (char *) memchr(pos, '\n', len); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
68 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
69 |
- if (pos) |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
70 |
- pos++; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
71 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
72 |
- /* we're done with the remain from last tx. */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
73 |
+ xmemcpy(line, gopherState->buf, gopherState->len); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
74 |
+ xmemcpy(line + gopherState->len, pos, llen); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
75 |
+ llen += gopherState->len; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
76 |
gopherState->len = 0; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
77 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
78 |
- *(gopherState->buf) = '\0'; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
79 |
} else { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
80 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
81 |
- lpos = (char *) memccpy(line, pos, '\n', len - (pos - inbuf)); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
82 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
83 |
- if (lpos) |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
84 |
- *lpos = '\0'; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
85 |
- else { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
86 |
- /* there is no complete line in inbuf */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
87 |
- /* copy it to temp buffer */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
88 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
89 |
- if ((len - (pos - inbuf)) > TEMP_BUF_SIZE) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
90 |
- debugs(10, 1, "GopherHTML: Buffer overflow. Lost some data on URL: " << entry->url() ); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
91 |
- len = TEMP_BUF_SIZE; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
92 |
- } |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
93 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
94 |
- if (len > (pos - inbuf)) { |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
95 |
- xmemcpy(gopherState->buf, pos, len - (pos - inbuf)); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
96 |
- gopherState->len = len - (pos - inbuf); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
97 |
- } |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
98 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
99 |
- break; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
100 |
- } |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
101 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
102 |
- /* skip one line */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
103 |
- pos = (char *) memchr(pos, '\n', len); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
104 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
105 |
- if (pos) |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
106 |
- pos++; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
107 |
- |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
108 |
+ xmemcpy(line, pos, llen); |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
109 |
} |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
110 |
+ line[llen + 1] = '\0'; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
111 |
+ /* move input to next line */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
112 |
+ pos = lpos; |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
113 |
|
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
114 |
/* at this point. We should have one line in buffer to process */ |
cc3545c342fd
7088912 Problem with utility/squid
Srinivasa Sarva <srinivasa.sarva@oracle.com>
parents:
diff
changeset
|
115 |