X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=encode.c;h=09c7b5f79ddf7c21feaf9e70aa88cb20a4eff8f6;hp=2ca9fad9c8ceb77e249bb78bf3500e859b152a1f;hb=9cfda1cc300d6f1693cb51e65571bf39ada1ccc5;hpb=605576ce35e16c57567f79dd9086bb9ae001753b diff --git a/encode.c b/encode.c index 2ca9fad9..09c7b5f7 100644 --- a/encode.c +++ b/encode.c @@ -1,4 +1,4 @@ -const char encode_rcs[] = "$Id: encode.c,v 1.2 2001/05/17 22:52:35 oes Exp $"; +const char encode_rcs[] = "$Id: encode.c,v 1.7 2002/03/24 13:25:43 swa Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/encode.c,v $ @@ -7,7 +7,7 @@ const char encode_rcs[] = "$Id: encode.c,v 1.2 2001/05/17 22:52:35 oes Exp $"; * encode cookies and HTML text. * * Copyright : Written by and Copyright (C) 2001 the SourceForge - * IJBSWA team. http://ijbswa.sourceforge.net + * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written * by and Copyright (C) 1997 Anonymous Coders and @@ -33,6 +33,24 @@ const char encode_rcs[] = "$Id: encode.c,v 1.2 2001/05/17 22:52:35 oes Exp $"; * * Revisions : * $Log: encode.c,v $ + * 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 * @@ -158,12 +176,20 @@ static const char * const cookie_code_map[256] = { * * 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 * html_encode(const char *s) { + char * buf; + + if (s == NULL) + { + return NULL; + } + /* each input char can expand to at most 6 chars */ - char * buf = (char *) malloc((strlen(s) * 6) + 1); + buf = (char *) malloc((strlen(s) * 6) + 1); if (buf) { @@ -189,6 +215,41 @@ char * html_encode(const char *s) return(buf); } + +/********************************************************************* + * + * Function : html_encode_and_free_original + * + * Description : Encodes a string so it's not interpreted as + * containing HTML tags or entities. + * Replaces <, >, &, and " with the appropriate HTML + * entities. Free()s original string. + * If original string is NULL, simply returns NULL. + * + * 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 * html_encode_and_free_original(char *s) +{ + char * result; + + if (s == NULL) + { + return NULL; + } + + result = html_encode(s); + free(s); + + return result; +} + + /********************************************************************* * * Function : cookie_encode @@ -202,12 +263,20 @@ char * html_encode(const char *s) * * 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; + + if (s == NULL) + { + return NULL; + } + /* each input char can expand to at most 3 chars */ - char * buf = (char *) malloc((strlen(s) * 3) + 1); + buf = (char *) malloc((strlen(s) * 3) + 1); if (buf) { @@ -246,12 +315,20 @@ char * cookie_encode(const char *s) * * 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 * url_encode(const char *s) { + char * buf; + + if (s == NULL) + { + return NULL; + } + /* each input char can expand to at most 3 chars */ - char * buf = (char *) malloc((strlen(s) * 3) + 1); + buf = (char *) malloc((strlen(s) * 3) + 1); if (buf) { @@ -291,7 +368,7 @@ char * url_encode(const char *s) * Returns : The integer value, or -1 for non-hex characters. * *********************************************************************/ -static int xdtoi(char d) +static int xdtoi(const int d) { if ((d >= '0') && (d <= '9')) { @@ -329,10 +406,10 @@ static int xtoi(const char *s) { int d1, d2; - d1 = xdtoi(*s++); + d1 = xdtoi(*s); if(d1 >= 0) { - d2 = xdtoi(*s); + d2 = xdtoi(*(s+1)); if(d2 >= 0) { return (d1 << 4) + d2; @@ -374,7 +451,7 @@ char *url_decode(const char * s) break; case '%': - if ((*q = xtoi(s + 1))) + if ((*q = xtoi(s + 1)) != '\0') { s += 3; q++;