Fix UAT escape widths.

Pass unsigned values to the %x format specifier so that naming an IO graph

你好 TCP Segments

doesn't end up saving

"\xffffffe4\xffffffbd\xffffffa0\xffffffe5\xffffffa5\xffffffbd TCP Segments"

to io_graphs. Fixes https://ask.wireshark.org/questions/54781/statistic-io-graph-add-a-new-graph-if-graph-name-use-chinese-it-will-cause-all-graph-name-garbled

Change-Id: I5bcae05ef9b3e17532edbb293f323586c9aeb471
Reviewed-on: https://code.wireshark.org/review/17053
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
This commit is contained in:
Gerald Combs 2016-08-14 13:49:19 -07:00 committed by Gerald Combs
parent 777061b196
commit 4b403b0b54
1 changed files with 23 additions and 18 deletions

View File

@ -44,6 +44,11 @@
#include "uat-int.h"
/*
* XXX Files are encoded as ASCII. We might want to encode them as UTF8
* instead.
*/
static GPtrArray* all_uats = NULL;
void uat_init(void) {
@ -268,7 +273,7 @@ static void putfld(FILE* fp, void* rec, uat_field_t* f) {
char c = fld_ptr[i];
if (c == '"' || c == '\\' || ! g_ascii_isprint((guchar)c) ) {
fprintf(fp,"\\x%.2x",c);
fprintf(fp,"\\x%02x", (guchar) c);
} else {
putc(c,fp);
}
@ -281,7 +286,7 @@ static void putfld(FILE* fp, void* rec, uat_field_t* f) {
guint i;
for(i=0;i<fld_len;i++) {
fprintf(fp,"%.2x",((const guint8*)fld_ptr)[i]);
fprintf(fp,"%02x", (guchar)fld_ptr[i]);
}
break;
@ -741,7 +746,7 @@ char* uat_esc(const char* buf, guint len) {
for (b = (const guint8 *)buf; b < end; b++) {
if (*b == '"' || *b == '\\' || ! g_ascii_isprint(*b) ) {
g_snprintf(s,5,"\\x%.2x",((guint)*b));
g_snprintf(s,5,"\\x%02x",((guint)*b));
s+=4;
} else {
*(s++) = (*b);
@ -756,9 +761,9 @@ gboolean uat_fld_chk_str_isprint(void* u1 _U_, const char* strptr, guint len, co
guint i;
for (i = 0; i < len; i++) {
char c = strptr[i];
if (! g_ascii_isprint(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%.2x",i,c);
char c = strptr[i];
if (! g_ascii_isprint(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%02x", i, (guchar) c);
return FALSE;
}
}
@ -770,9 +775,9 @@ gboolean uat_fld_chk_str_isalpha(void* u1 _U_, const char* strptr, guint len, co
guint i;
for (i = 0; i < len; i++) {
char c = strptr[i];
if (! g_ascii_isalpha(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%.2x",i,c);
char c = strptr[i];
if (! g_ascii_isalpha(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%02x", i, (guchar) c);
return FALSE;
}
}
@ -784,9 +789,9 @@ gboolean uat_fld_chk_str_isalnum(void* u1 _U_, const char* strptr, guint len, co
guint i;
for (i = 0; i < len; i++) {
char c = strptr[i];
if (! g_ascii_isalnum(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%.2x",i,c);
char c = strptr[i];
if (! g_ascii_isalnum(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%02x", i, (guchar) c);
return FALSE;
}
}
@ -798,9 +803,9 @@ gboolean uat_fld_chk_str_isdigit(void* u1 _U_, const char* strptr, guint len, co
guint i;
for (i = 0; i < len; i++) {
char c = strptr[i];
if (! g_ascii_isdigit(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%.2x",i,c);
char c = strptr[i];
if (! g_ascii_isdigit(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%02x", i, (guchar) c);
return FALSE;
}
}
@ -812,9 +817,9 @@ gboolean uat_fld_chk_str_isxdigit(void* u1 _U_, const char* strptr, guint len, c
guint i;
for (i = 0; i < len; i++) {
char c = strptr[i];
if (! g_ascii_isxdigit(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%.2x",i,c);
char c = strptr[i];
if (! g_ascii_isxdigit(c)) {
*err = g_strdup_printf("invalid char pos=%d value=%02x", i, (guchar) c);
return FALSE;
}
}