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