--- globus_gss_assist-3.5/gridmap.c.orig 2003-01-05 01:19:32.000000000 +0100
+++ globus_gss_assist-3.5/gridmap.c 2003-11-21 12:06:22.000000000 +0100
@@ -1082,6 +1082,9 @@
globus_result_t result = GLOBUS_SUCCESS;
static char * _function_name_ =
"globus_i_gss_assist_gridmap_parse_globusid";
+
+ static char * hexdigit = "0123456789ABCDEF";
+
GLOBUS_I_GSI_GSS_ASSIST_DEBUG_ENTER;
/*
@@ -1146,7 +1149,7 @@
* First, make sure we have enough room in our output buffer.
*/
- if ((buffer_index + 1 /* for NUL */) >= buffer_len)
+ while ((buffer_index + 4) >= buffer_len)
{
/* Grow buffer */
char *tmp_buffer;
@@ -1169,8 +1172,18 @@
buffer = tmp_buffer;
}
-
- buffer[buffer_index++] = unparsed_char;
+
+ if ((unparsed_char < ' ') || (unparsed_char > '~'))
+ {
+ buffer[buffer_index++] = '\\';
+ buffer[buffer_index++] = 'x';
+ buffer[buffer_index++] = hexdigit[(unparsed_char >> 4) & 0x0f];
+ buffer[buffer_index++] = hexdigit[unparsed_char & 0x0f];
+ }
+ else
+ {
+ buffer[buffer_index++] = unparsed_char;
+ }
buffer[buffer_index] = NUL;
escaped = 0;