]>
git.ipfire.org Git - thirdparty/squid.git/blob - lib/html_quote.c
3 * AUTHOR: Robert Collins
5 * SQUID Web Proxy Cache http://www.squid-cache.org/
6 * ----------------------------------------------------------
8 * Squid is the result of efforts by numerous individuals from
9 * the Internet community; see the CONTRIBUTORS file for full
10 * details. Many organizations have provided support for Squid's
11 * development; see the SPONSORS file for full details. Squid is
12 * Copyrighted (C) 2001 by the Regents of the University of
13 * California; see the COPYRIGHT file for full details. Squid
14 * incorporates software developed and/or copyrighted by other
15 * sources; see the CREDITS file for full details.
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
34 #include "html_quote.h"
41 * HTML defines these characters as special entities that should be quoted.
46 } htmlstandardentities
[] =
49 /* NOTE: The quoted form MUST not be larger than 6 character.
50 * see close to the MemPool commend below
73 * html_do_quote - Returns a static buffer containing the quoted
77 html_quote(const char *string
)
80 static size_t bufsize
= 0;
85 /* XXX This really should be implemented using a MemPool, but
86 * MemPools are not yet available in lib...
88 if (buf
== NULL
|| strlen(string
) * 6 > bufsize
) {
90 bufsize
= strlen(string
) * 6 + 1;
91 buf
= xcalloc(bufsize
, 1);
93 for (src
= string
, dst
= buf
; *src
; src
++) {
94 const char *escape
= NULL
;
95 const unsigned char ch
= *src
;
97 /* Walk thru the list of HTML Entities that must be quoted to
100 for (i
= 0; htmlstandardentities
[i
].code
; i
++) {
101 if (ch
== htmlstandardentities
[i
].code
) {
102 escape
= htmlstandardentities
[i
].quote
;
106 /* Encode control chars just to be on the safe side, and make
107 * sure all 8-bit characters are encoded to protect from buggy
110 if (!escape
&& (ch
<= 0x1F || ch
>= 0x7f) && ch
!= '\n' && ch
!= '\r' && ch
!= '\t') {
111 static char dec_encoded
[7];
112 snprintf(dec_encoded
, sizeof dec_encoded
, "&#%3d;", (int) ch
);
113 escape
= dec_encoded
;
116 /* Ok, An escaped form was found above. Use it */
117 strncpy(dst
, escape
, 6);
118 dst
+= strlen(escape
);
120 /* Apparently there is no need to escape this character */
124 /* Nullterminate and return the result */