-const char encode_rcs[] = "$Id: encode.c,v 1.12 2007/08/04 10:15:51 fabiankeil Exp $";
+const char encode_rcs[] = "$Id: encode.c,v 1.16 2010/06/13 12:27:39 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/encode.c,v $
* Purpose : Functions to encode and decode URLs, and also to
* encode cookies and HTML text.
*
- * Copyright : Written by and Copyright (C) 2001 the SourceForge
+ * Copyright : Written by and Copyright (C) 2001 the
* Privoxy team. http://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
* or write to the Free Software Foundation, Inc., 59
* Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * Revisions :
- * $Log: encode.c,v $
- * Revision 1.12 2007/08/04 10:15:51 fabiankeil
- * Use strlcpy() instead of strcpy().
- *
- * Revision 1.11 2006/12/28 18:25:53 fabiankeil
- * Fixed gcc43 compiler warning.
- *
- * Revision 1.10 2006/07/18 14:48:45 david__schmidt
- * Reorganizing the repository: swapping out what was HEAD (the old 3.1 branch)
- * with what was really the latest development (the v_3_0_branch branch)
- *
- * Revision 1.8 2002/03/26 22:29:54 swa
- * we have a new homepage!
- *
- * Revision 1.7 2002/03/24 13:25:43 swa
- * name change related issues
- *
- * Revision 1.6 2002/03/13 00:27:04 jongfoster
- * Killing warnings
- *
- * Revision 1.5 2002/03/07 03:46:53 oes
- * Fixed compiler warnings etc
- *
- * Revision 1.4 2002/01/22 23:28:07 jongfoster
- * Adding convenience function html_encode_and_free_original()
- * Making all functions accept NULL paramaters - in this case, they
- * simply return NULL. This allows error-checking to be deferred.
- *
- * Revision 1.3 2001/11/13 00:16:40 jongfoster
- * Replacing references to malloc.h with the standard stdlib.h
- * (See ANSI or K&R 2nd Ed)
- *
- * Revision 1.2 2001/05/17 22:52:35 oes
- * - Cleaned CRLF's from the sources and related files
- *
- * Revision 1.1.1.1 2001/05/15 13:58:51 oes
- * Initial import of version 2.9.3 source tree
- *
- *
*********************************************************************/
-\f
+
#include "config.h"
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,""",NULL,NULL,NULL,"&",NULL,
+ NULL, NULL, NULL, NULL,""",NULL,NULL,NULL,"&","'",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
"<",NULL,">",NULL,NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL
};
-/* Maps special characters in a cookie to their equivalent % codes. */
-static const char * const cookie_code_map[256] = {
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, "+", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, "%2C",NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "%3B",
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL
-};
-
/*********************************************************************
*
}
-/*********************************************************************
- *
- * Function : cookie_encode
- *
- * Description : Encodes a string so it can be used in a cookie.
- * Replaces " ", ",", and ";" with the appropriate
- * codes.
- *
- * Parameters :
- * 1 : s = String to encode. Null-terminated.
- *
- * Returns : Encoded string, newly allocated on the heap.
- * Caller is responsible for freeing it with free().
- * If s is NULL, or on out-of memory, returns NULL.
- *
- *********************************************************************/
-char * cookie_encode(const char *s)
-{
- char * buf;
- size_t buf_size;
-
- if (s == NULL)
- {
- return NULL;
- }
-
- /* each input char can expand to at most 3 chars */
- buf_size = (strlen(s) * 3) + 1;
- buf = (char *) malloc(buf_size);
-
- if (buf)
- {
- char c;
- char * p = buf;
- while ( (c = *s++) != '\0')
- {
- const char * replace_with = cookie_code_map[(unsigned char) c];
- if (replace_with != NULL)
- {
- const size_t bytes_written = (size_t)(p - buf);
- assert(bytes_written < buf_size);
- p += strlcpy(p, replace_with, buf_size - bytes_written);
- }
- else
- {
- *p++ = c;
- }
- }
-
- *p = '\0';
- }
-
- assert(strlen(buf) < buf_size);
- return(buf);
-}
-
/*********************************************************************
*
* Function : url_encode
*********************************************************************/
int xtoi(const char *s)
{
- int d1, d2;
+ int d1;
d1 = xdtoi(*s);
if(d1 >= 0)
{
- d2 = xdtoi(*(s+1));
+ int d2 = xdtoi(*(s+1));
if(d2 >= 0)
{
return (d1 << 4) + d2;