components/squid/patches/src.gopher.cc.patch
author Srinivasa Sarva <srinivasa.sarva@oracle.com>
Tue, 20 Dec 2011 22:26:25 -0800
branchs11-sru
changeset 2238 cc3545c342fd
permissions -rw-r--r--
7088912 Problem with utility/squid
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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