--- src/string_functions.c.orig Thu Jun 9 18:18:53 2005 +++ src/string_functions.c Thu Jun 9 18:18:36 2005 @@ -81,19 +81,25 @@ { char *local_str=NULL; int i; - if(str_len==SQL_NTS){ - if(str&&str[0]) - for(i=0; i<strlen(str); i++) - str[i]=toupper(str[i]); - return((char*)str); - } + + if(str_len==SQL_NTS) + { + if(!str || !str[0]) + return((char*)str); + + /* + * always copy to malloc'ed string because str + * may point to read-only memory + */ + str_len = strlen(str); + } if(str_len>=0) { local_str=ORAMALLOC(str_len+1); memcpy(local_str,str,str_len); local_str[str_len] = '\0'; } - for(i=0; i<str_len; i++)local_str[i]=toupper(local_str[i]); + for(i=0; i<str_len; i++)local_str[i]=toupper((unsigned char) local_str[i]); return(local_str); }