wow: Reverse string bytes before converting to UTF-8
WOW has several 4 octet ASCII strings in reverse order. g_strreverse does not work on UTF-8 multibyte characters, such as REPLACEMENT CHARACTER when there are errors. Reverse the string buffer before converting from ASCII. Fix #18529
This commit is contained in:
parent
be992b94a1
commit
398fb66598
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include <epan/packet.h>
|
||||
#include <epan/prefs.h>
|
||||
#include <epan/charsets.h>
|
||||
#include "packet-tcp.h"
|
||||
|
||||
void proto_register_wow(void);
|
||||
|
@ -457,6 +458,7 @@ parse_logon_reconnect_challenge_server_to_client(tvbuff_t *tvb, proto_tree *wow_
|
|||
static void
|
||||
parse_logon_challenge_client_to_server(packet_info *pinfo, tvbuff_t *tvb, proto_tree *wow_tree, guint32 offset) {
|
||||
guint8 srp_i_len;
|
||||
char buffer[5];
|
||||
gchar *string;
|
||||
|
||||
proto_tree_add_item(wow_tree, hf_wow_protocol_version, tvb,
|
||||
|
@ -467,13 +469,13 @@ parse_logon_challenge_client_to_server(packet_info *pinfo, tvbuff_t *tvb, proto_
|
|||
tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
||||
offset += 2;
|
||||
|
||||
string = g_strreverse(tvb_get_string_enc(pinfo->pool, tvb, offset, 4, ENC_ASCII));
|
||||
tvb_get_raw_bytes_as_string(tvb, offset, buffer, 5);
|
||||
string = get_ascii_string(pinfo->pool, g_strreverse(buffer), 4);
|
||||
proto_tree_add_string(wow_tree, hf_wow_gamename,
|
||||
tvb, offset, 4, string);
|
||||
offset += 4;
|
||||
|
||||
|
||||
|
||||
client_game_version.major_version = tvb_get_guint8(tvb, offset);
|
||||
proto_tree_add_item(wow_tree, hf_wow_version1,
|
||||
tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
||||
|
@ -494,17 +496,20 @@ parse_logon_challenge_client_to_server(packet_info *pinfo, tvbuff_t *tvb, proto_
|
|||
offset, 2, ENC_LITTLE_ENDIAN);
|
||||
offset += 2;
|
||||
|
||||
string = g_strreverse(tvb_get_string_enc(pinfo->pool, tvb, offset, 4, ENC_ASCII));
|
||||
tvb_get_raw_bytes_as_string(tvb, offset, buffer, 5);
|
||||
string = get_ascii_string(pinfo->pool, g_strreverse(buffer), 4);
|
||||
proto_tree_add_string(wow_tree, hf_wow_platform,
|
||||
tvb, offset, 4, string);
|
||||
offset += 4;
|
||||
|
||||
string = g_strreverse(tvb_get_string_enc(pinfo->pool, tvb, offset, 4, ENC_ASCII));
|
||||
tvb_get_raw_bytes_as_string(tvb, offset, buffer, 5);
|
||||
string = get_ascii_string(pinfo->pool, g_strreverse(buffer), 4);
|
||||
proto_tree_add_string(wow_tree, hf_wow_os, tvb,
|
||||
offset, 4, string);
|
||||
offset += 4;
|
||||
|
||||
string = g_strreverse(tvb_get_string_enc(pinfo->pool, tvb, offset, 4, ENC_ASCII));
|
||||
tvb_get_raw_bytes_as_string(tvb, offset, buffer, 5);
|
||||
string = get_ascii_string(pinfo->pool, g_strreverse(buffer), 4);
|
||||
proto_tree_add_string(wow_tree, hf_wow_country,
|
||||
tvb, offset, 4, string);
|
||||
offset += 4;
|
||||
|
|
Loading…
Reference in New Issue