aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-tds.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2012-03-31 20:57:15 +0000
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2012-03-31 20:57:15 +0000
commit80445e5a9977caf5d6c2a4555381d1b1d64a5018 (patch)
tree04a7a30a7af33c1f2c79b4d60b00d119f5ffb97e /epan/dissectors/packet-tds.c
parentbb8afe3f688c137bc275354b4ffc36f766e154e5 (diff)
Fix off by one shift errors introduced in r39530 where it seemed proper[1]
[1] I'm unsure of packet-dtpt, so I haven't patch it. svn path=/trunk/; revision=41873
Diffstat (limited to 'epan/dissectors/packet-tds.c')
-rw-r--r--epan/dissectors/packet-tds.c44
1 files changed, 24 insertions, 20 deletions
diff --git a/epan/dissectors/packet-tds.c b/epan/dissectors/packet-tds.c
index 7a696c767c..7f9f658a89 100644
--- a/epan/dissectors/packet-tds.c
+++ b/epan/dissectors/packet-tds.c
@@ -967,7 +967,7 @@ dissect_tds_query_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
is_unicode = FALSE;
if (is_unicode)
- msg = tvb_get_ephemeral_unicode_string(tvb, offset, len/2, ENC_LITTLE_ENDIAN);
+ msg = tvb_get_ephemeral_unicode_string(tvb, offset, len, ENC_LITTLE_ENDIAN);
else
msg = (gchar*)tvb_get_ephemeral_string(tvb, offset, len);
@@ -986,7 +986,7 @@ dissect_tds5_lang_token(tvbuff_t *tvb, guint offset, guint len, proto_tree *tree
len -= 1;
if (is_unicode)
- msg = tvb_get_ephemeral_unicode_string(tvb, offset, (len)/2, ENC_LITTLE_ENDIAN);
+ msg = tvb_get_ephemeral_unicode_string(tvb, offset, len, ENC_LITTLE_ENDIAN);
else
msg = (gchar*)tvb_get_ephemeral_string(tvb, offset, len);
@@ -1149,8 +1149,8 @@ dissect_tds7_login(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (len != 0) {
if( i != 2) {
/* tds 7 is always unicode */
- val = tvb_get_ephemeral_unicode_string(tvb, offset2, len, ENC_LITTLE_ENDIAN);
len *= 2;
+ val = tvb_get_ephemeral_unicode_string(tvb, offset2, len, ENC_LITTLE_ENDIAN);
proto_tree_add_text(login_tree, tvb, offset2, len, "%s: %s", val_to_str(i, login_field_names, "Unknown"), val);
} else {
/* This field is the password. We retrieve it from the packet
@@ -1465,9 +1465,9 @@ dissect_tds_env_chg(tvbuff_t *tvb, guint offset, guint token_sz,
if (env_type != 7) { /* if it's not 'Collation Info - which is not textual! */
string_offset = offset + 2;
if (is_unicode == TRUE) {
+ new_len *= 2;
new_val = tvb_get_ephemeral_unicode_string(tvb, string_offset,
new_len, ENC_LITTLE_ENDIAN);
- new_len *= 2;
} else
new_val = (gchar*)tvb_get_ephemeral_string(tvb, string_offset, new_len);
proto_tree_add_text(tree, tvb, string_offset, new_len,
@@ -1492,9 +1492,9 @@ dissect_tds_env_chg(tvbuff_t *tvb, guint offset, guint token_sz,
if (old_len) {
string_offset = old_len_offset + 1;
if (is_unicode == TRUE) {
+ old_len *= 2;
old_val = tvb_get_ephemeral_unicode_string(tvb, string_offset,
old_len, ENC_LITTLE_ENDIAN);
- old_len *= 2;
} else
old_val = (gchar*)tvb_get_ephemeral_string(tvb, string_offset, old_len);
proto_tree_add_text(tree, tvb, string_offset, old_len,
@@ -1525,8 +1525,8 @@ dissect_tds_err_token(tvbuff_t *tvb, guint offset, guint token_sz _U_, proto_tre
is_unicode = TRUE;
if(is_unicode) {
- msg = tvb_get_ephemeral_unicode_string(tvb, offset, msg_len, ENC_LITTLE_ENDIAN);
msg_len *= 2;
+ msg = tvb_get_ephemeral_unicode_string(tvb, offset, msg_len, ENC_LITTLE_ENDIAN);
} else {
msg = (gchar*)tvb_get_ephemeral_string(tvb, offset, msg_len);
}
@@ -1539,8 +1539,8 @@ dissect_tds_err_token(tvbuff_t *tvb, guint offset, guint token_sz _U_, proto_tre
offset +=1;
if(srvr_len) {
if (is_unicode) {
- msg = tvb_get_ephemeral_unicode_string(tvb, offset, srvr_len, ENC_LITTLE_ENDIAN);
srvr_len *=2;
+ msg = tvb_get_ephemeral_unicode_string(tvb, offset, srvr_len, ENC_LITTLE_ENDIAN);
} else {
msg = (gchar*)tvb_get_ephemeral_string(tvb, offset, srvr_len);
}
@@ -1554,8 +1554,8 @@ dissect_tds_err_token(tvbuff_t *tvb, guint offset, guint token_sz _U_, proto_tre
offset +=1;
if(proc_len) {
if (is_unicode) {
- msg = tvb_get_ephemeral_unicode_string(tvb, offset, proc_len, ENC_LITTLE_ENDIAN);
proc_len *=2;
+ msg = tvb_get_ephemeral_unicode_string(tvb, offset, proc_len, ENC_LITTLE_ENDIAN);
} else {
msg = (gchar*)tvb_get_ephemeral_string(tvb, offset, proc_len);
}
@@ -1590,8 +1590,8 @@ dissect_tds_login_ack_token(tvbuff_t *tvb, guint offset, guint token_sz, proto_t
is_unicode = TRUE;
proto_tree_add_text(tree, tvb, offset, 0, "msg_len: %d, token_sz: %d, total: %d",msg_len, token_sz, msg_len + 6U + 3U);
if(is_unicode) {
- msg = tvb_get_ephemeral_unicode_string(tvb, offset, msg_len, ENC_LITTLE_ENDIAN);
msg_len *= 2;
+ msg = tvb_get_ephemeral_unicode_string(tvb, offset, msg_len, ENC_LITTLE_ENDIAN);
} else {
msg = (gchar*)tvb_get_ephemeral_string(tvb, offset, msg_len);
}
@@ -1643,9 +1643,10 @@ dissect_tds7_results_token(tvbuff_t *tvb, guint offset, proto_tree *tree)
table_len = tvb_get_letohs(tvb, offset);
offset +=2;
if(table_len != 0) {
+ table_len *= 2;
msg = tvb_get_ephemeral_unicode_string(tvb, offset, table_len, ENC_LITTLE_ENDIAN);
- proto_tree_add_text(tree, tvb, offset, table_len*2, "Table name: %s", msg);
- offset += table_len*2;
+ proto_tree_add_text(tree, tvb, offset, table_len, "Table name: %s", msg);
+ offset += table_len;
}
}
else if (type == 106 || type == 108) {
@@ -1671,9 +1672,10 @@ dissect_tds7_results_token(tvbuff_t *tvb, guint offset, proto_tree *tree)
proto_tree_add_text(tree, tvb, offset, 1, "message length: %d",msg_len);
offset += 1;
if(msg_len != 0) {
+ msg_len *= 2;
msg = tvb_get_ephemeral_unicode_string(tvb, offset, msg_len, ENC_LITTLE_ENDIAN);
- proto_tree_add_text(tree, tvb, offset, msg_len*2, "Text: %s", msg);
- offset += msg_len*2;
+ proto_tree_add_text(tree, tvb, offset, msg_len, "Text: %s", msg);
+ offset += msg_len;
}
}
return offset;
@@ -1864,7 +1866,7 @@ dissect_tds_type_varbyte(tvbuff_t *tvb, guint *offset, packet_info *pinfo, proto
proto_tree_add_item(sub_tree, hf_tds_type_varbyte_data_string, tvb, *offset, length, ENC_ASCII|ENC_NA);
break;
case TDS_DATA_TYPE_NVARCHAR: /* NVarChar */
- string_value = tvb_get_ephemeral_unicode_string(tvb, *offset, length / 2, ENC_LITTLE_ENDIAN);
+ string_value = tvb_get_ephemeral_unicode_string(tvb, *offset, length, ENC_LITTLE_ENDIAN);
proto_tree_add_string(sub_tree, hf_tds_type_varbyte_data_string, tvb, *offset, length, string_value);
break;
case TDS_DATA_TYPE_XML: /* XML (introduced in TDS 7.2) */
@@ -2018,7 +2020,7 @@ dissect_tds_type_varbyte(tvbuff_t *tvb, guint *offset, packet_info *pinfo, proto
break;
case TDS_DATA_TYPE_NVARCHAR: /* NVarChar */
case TDS_DATA_TYPE_NCHAR: /* NChar */
- string_value = tvb_get_ephemeral_unicode_string(tvb, *offset, length / 2, ENC_LITTLE_ENDIAN);
+ string_value = tvb_get_ephemeral_unicode_string(tvb, *offset, length, ENC_LITTLE_ENDIAN);
proto_tree_add_string(sub_tree, hf_tds_type_varbyte_data_string, tvb, *offset, length, string_value);
break;
default:
@@ -2045,7 +2047,7 @@ dissect_tds_type_varbyte(tvbuff_t *tvb, guint *offset, packet_info *pinfo, proto
else {
switch(data_type) {
case TDS_DATA_TYPE_NTEXT: /* NText */
- string_value = tvb_get_ephemeral_unicode_string(tvb, *offset, length / 2, ENC_LITTLE_ENDIAN);
+ string_value = tvb_get_ephemeral_unicode_string(tvb, *offset, length, ENC_LITTLE_ENDIAN);
proto_tree_add_string(sub_tree, hf_tds_type_varbyte_data_string, tvb, *offset, length, string_value);
break;
default: /*TODO*/
@@ -2099,9 +2101,10 @@ dissect_tds_rpc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset += 2;
}
else if (len != 0) {
+ len *= 2;
val = tvb_get_ephemeral_unicode_string(tvb, offset, len, ENC_LITTLE_ENDIAN);
- proto_tree_add_string(tree, hf_tds_rpc_name, tvb, offset, len * 2, val);
- offset += len * 2;
+ proto_tree_add_string(tree, hf_tds_rpc_name, tvb, offset, len, val);
+ offset += len;
}
break;
}
@@ -2128,9 +2131,10 @@ dissect_tds_rpc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree_add_item(sub_tree, hf_tds_rpc_parameter_name_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
++offset;
if(len) {
+ len *= 2;
val = tvb_get_ephemeral_unicode_string(tvb, offset, len, ENC_LITTLE_ENDIAN);
- proto_tree_add_string(sub_tree, hf_tds_rpc_parameter_name, tvb, offset, len * 2, val);
- offset += len * 2;
+ proto_tree_add_string(sub_tree, hf_tds_rpc_parameter_name, tvb, offset, len, val);
+ offset += len;
}
item = proto_tree_add_item(sub_tree, hf_tds_rpc_parameter_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
status_sub_tree = proto_item_add_subtree(item, ett_tds_rpc_parameter_status);