-const char encode_rcs[] = "$Id: encode.c,v 1.10 2006/07/18 14:48:45 david__schmidt Exp $";
+const char encode_rcs[] = "$Id: encode.c,v 1.13 2007/08/18 14:34:27 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/encode.c,v $
*
* Revisions :
* $Log: encode.c,v $
+ * Revision 1.13 2007/08/18 14:34:27 fabiankeil
+ * Make xtoi() extern so it can be used in pcrs.c.
+ *
+ * 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)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <assert.h>
+#include "miscutil.h"
#include "encode.h"
const char encode_h_rcs[] = ENCODE_H_VERSION;
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
-};
-
/*********************************************************************
*
char * html_encode(const char *s)
{
char * buf;
+ size_t buf_size;
if (s == NULL)
{
}
/* each input char can expand to at most 6 chars */
- buf = (char *) malloc((strlen(s) * 6) + 1);
+ buf_size = (strlen(s) * 6) + 1;
+ buf = (char *) malloc(buf_size);
if (buf)
{
const char * replace_with = html_code_map[(unsigned char) c];
if(replace_with != NULL)
{
- strcpy(p, replace_with);
- p += strlen(replace_with);
+ 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 = '\0';
}
+ assert(strlen(buf) < buf_size);
return(buf);
}
}
-/*********************************************************************
- *
- * 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;
-
- if (s == NULL)
- {
- return NULL;
- }
-
- /* each input char can expand to at most 3 chars */
- buf = (char *) malloc((strlen(s) * 3) + 1);
-
- 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)
- {
- strcpy(p, replace_with);
- p += strlen(replace_with);
- }
- else
- {
- *p++ = c;
- }
- }
-
- *p = '\0';
- }
-
- return(buf);
-}
-
/*********************************************************************
*
* Function : url_encode
char * url_encode(const char *s)
{
char * buf;
+ size_t buf_size;
if (s == NULL)
{
}
/* each input char can expand to at most 3 chars */
- buf = (char *) malloc((strlen(s) * 3) + 1);
+ buf_size = (strlen(s) * 3) + 1;
+ buf = (char *) malloc(buf_size);
if (buf)
{
const char * replace_with = url_code_map[(unsigned char) c];
if (replace_with != NULL)
{
- strcpy(p, replace_with);
- p += strlen(replace_with);
+ const size_t bytes_written = (size_t)(p - buf);
+ assert(bytes_written < buf_size);
+ p += strlcpy(p, replace_with, buf_size - bytes_written);
}
else
{
}
+ assert(strlen(buf) < buf_size);
return(buf);
}
* Returns : The integer value, or 0 for non-hex strings.
*
*********************************************************************/
-static int xtoi(const char *s)
+int xtoi(const char *s)
{
int d1, d2;