aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2018-08-31 23:00:44 +0200
committerAnders Broman <a.broman58@gmail.com>2018-09-03 04:05:13 +0000
commit65b342f7497825c2abc4e98c7fd9f4ff6d8ed45c (patch)
tree3746e1055e28476a4b8ba30df6996fcd16b636c1 /epan
parent42ad60896da6655d89c4e220a36766f121cdb856 (diff)
epan: Use g_base64_decode_inplace()
Replace ws_base64_decode_inplace() with g_base64_decode_inplace() or g_base64_decode(), which was introduced in glib 2.12. The only observed difference is a need for zero-terminate the buffer after decoding. Change-Id: Ia102d0d8e9bec575ffeddf448191a3f6de9fb1ed Reviewed-on: https://code.wireshark.org/review/29382 Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-http.c18
-rw-r--r--epan/dissectors/packet-smtp.c39
-rw-r--r--epan/tvbuff_base64.c9
-rw-r--r--epan/wslua/wslua_byte_array.c11
4 files changed, 48 insertions, 29 deletions
diff --git a/epan/dissectors/packet-http.c b/epan/dissectors/packet-http.c
index 5f16071321..b481c86713 100644
--- a/epan/dissectors/packet-http.c
+++ b/epan/dissectors/packet-http.c
@@ -34,7 +34,6 @@
#include <epan/proto_data.h>
#include <epan/export_object.h>
-#include <wsutil/base64.h>
#include "packet-http.h"
#include "packet-tcp.h"
#include "packet-ssl.h"
@@ -3311,6 +3310,7 @@ check_auth_basic(proto_item *hdr_item, tvbuff_t *tvb, gchar *value)
const char **header;
size_t hdrlen;
proto_tree *hdr_tree;
+ gsize len;
for (header = &basic_headers[0]; *header != NULL; header++) {
hdrlen = strlen(*header);
@@ -3322,7 +3322,8 @@ check_auth_basic(proto_item *hdr_item, tvbuff_t *tvb, gchar *value)
hdr_tree = NULL;
value += hdrlen;
- ws_base64_decode_inplace(value);
+ g_base64_decode_inplace(value, &len);
+ value[len] = 0;
proto_tree_add_string(hdr_tree, hf_http_basic, tvb,
0, 0, value);
@@ -3350,6 +3351,7 @@ check_auth_citrixbasic(proto_item *hdr_item, tvbuff_t *tvb, gchar *value, int of
char *data_val;
proto_item *hidden_item;
proto_item *pi;
+ gsize len;
for (header = &basic_headers[0]; *header != NULL; header++) {
hdrlen = strlen(*header);
@@ -3372,7 +3374,8 @@ check_auth_citrixbasic(proto_item *hdr_item, tvbuff_t *tvb, gchar *value, int of
if ( ch_ptr != NULL ) {
data_len = (int)(ch_ptr - value + 1);
data_val = wmem_strndup(wmem_packet_scope(), value, data_len);
- ws_base64_decode_inplace(data_val);
+ g_base64_decode_inplace(data_val, &len);
+ data_val[len] = 0;
pi = proto_tree_add_string(hdr_tree, hf_http_citrix_user, tvb,
offset , data_len - 1, data_val);
PROTO_ITEM_SET_GENERATED(pi);
@@ -3387,7 +3390,8 @@ check_auth_citrixbasic(proto_item *hdr_item, tvbuff_t *tvb, gchar *value, int of
if ( ch_ptr != NULL ) {
data_len = (int)(ch_ptr - value + 1);
data_val = wmem_strndup(wmem_packet_scope(), value, data_len);
- ws_base64_decode_inplace(data_val);
+ g_base64_decode_inplace(data_val, &len);
+ data_val[len] = 0;
pi = proto_tree_add_string(hdr_tree, hf_http_citrix_domain, tvb,
offset, data_len - 1, data_val);
PROTO_ITEM_SET_GENERATED(pi);
@@ -3402,7 +3406,8 @@ check_auth_citrixbasic(proto_item *hdr_item, tvbuff_t *tvb, gchar *value, int of
if ( ch_ptr != NULL ) {
data_len = (int)(ch_ptr - value + 1);
data_val = wmem_strndup(wmem_packet_scope(), value, data_len);
- ws_base64_decode_inplace(data_val);
+ g_base64_decode_inplace(data_val, &len);
+ data_val[len] = 0;
pi = proto_tree_add_string(hdr_tree, hf_http_citrix_passwd, tvb,
offset, data_len - 1, data_val);
PROTO_ITEM_SET_GENERATED(pi);
@@ -3417,7 +3422,8 @@ check_auth_citrixbasic(proto_item *hdr_item, tvbuff_t *tvb, gchar *value, int of
if ( ch_ptr != NULL ) {
data_len = (int)(ch_ptr - value + 1);
data_val = wmem_strndup(wmem_packet_scope(), value, data_len);
- ws_base64_decode_inplace(data_val);
+ g_base64_decode_inplace(data_val, &len);
+ data_val[len] = 0;
pi = proto_tree_add_string(hdr_tree, hf_http_citrix_session, tvb,
offset, data_len - 1, data_val);
PROTO_ITEM_SET_GENERATED(pi);
diff --git a/epan/dissectors/packet-smtp.c b/epan/dissectors/packet-smtp.c
index 104b705464..c45f86c3d0 100644
--- a/epan/dissectors/packet-smtp.c
+++ b/epan/dissectors/packet-smtp.c
@@ -24,7 +24,6 @@
#include <epan/reassemble.h>
#include <epan/proto_data.h>
-#include <wsutil/base64.h>
#include <wsutil/str_util.h>
#include "packet-ssl.h"
#include "packet-ssl-utils.h"
@@ -310,10 +309,13 @@ decode_plain_auth(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
gint length_pass;
guint8 *decrypt = NULL;
proto_item *ti;
+ gsize len;
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, a_offset, a_linelen, ENC_ASCII);
if (smtp_auth_parameter_decoding_enabled) {
- returncode = (gint)ws_base64_decode_inplace(decrypt);
+ g_base64_decode_inplace(decrypt, &len);
+ decrypt[len] = 0;
+ returncode = (gint)len;
if (returncode) {
length_user1 = (gint)strlen(decrypt);
if (returncode >= (length_user1 + 1)) {
@@ -364,7 +366,7 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
fragment_head *frag_msg = NULL;
tvbuff_t *next_tvb;
guint8 *decrypt = NULL;
- size_t decrypt_len = 0;
+ gsize decrypt_len = 0;
guint8 *base64_string = NULL;
guint8 line_code[3];
@@ -555,7 +557,9 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
((session_state->last_auth_frame == 0) || (pinfo->num <= session_state->last_auth_frame))) {
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset, linelen, ENC_ASCII);
if ((smtp_auth_parameter_decoding_enabled) &&
- ((decrypt_len = ws_base64_decode_inplace(decrypt)) > 0)) {
+ (g_base64_decode_inplace(decrypt, &decrypt_len)) &&
+ (decrypt_len > 0)) {
+ decrypt[decrypt_len] = 0;
line = decrypt;
linelen = (int)decrypt_len;
} else {
@@ -819,7 +823,9 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset, linelen, ENC_ASCII);
decrypt_len = linelen;
if (smtp_auth_parameter_decoding_enabled) {
- if ((decrypt_len = ws_base64_decode_inplace(decrypt)) == 0) {
+ g_base64_decode_inplace(decrypt, &decrypt_len);
+ decrypt[decrypt_len] = 0;
+ if (decrypt_len == 0) {
/* Go back to the original string */
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset, linelen, ENC_ASCII);
decrypt_len = linelen;
@@ -835,7 +841,9 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset, linelen, ENC_ASCII);
decrypt_len = linelen;
if (smtp_auth_parameter_decoding_enabled) {
- if ((decrypt_len = ws_base64_decode_inplace(decrypt)) == 0) {
+ g_base64_decode_inplace(decrypt, &decrypt_len);
+ decrypt[decrypt_len] = 0;
+ if (decrypt_len == 0) {
/* Go back to the original string */
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset, linelen, ENC_ASCII);
decrypt_len = linelen;
@@ -849,7 +857,9 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset, linelen, ENC_ASCII);
decrypt_len = linelen;
if (smtp_auth_parameter_decoding_enabled) {
- if ((decrypt_len = ws_base64_decode_inplace(decrypt)) == 0) {
+ g_base64_decode_inplace(decrypt, &decrypt_len);
+ decrypt[decrypt_len] = 0;
+ if (decrypt_len == 0) {
/* Go back to the original string */
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset, linelen, ENC_ASCII);
decrypt_len = linelen;
@@ -896,7 +906,9 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset + 11, linelen - 11, ENC_ASCII);
decrypt_len = linelen - 11;
if (smtp_auth_parameter_decoding_enabled) {
- if ((decrypt_len = ws_base64_decode_inplace(decrypt)) == 0) {
+ g_base64_decode_inplace(decrypt, &decrypt_len);
+ decrypt[decrypt_len] = 0;
+ if (decrypt_len == 0) {
/* Go back to the original string */
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset + 11, linelen - 11, ENC_ASCII);
decrypt_len = linelen - 11;
@@ -916,7 +928,9 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset + 10, linelen - 10, ENC_ASCII);
decrypt_len = linelen - 10;
if (smtp_auth_parameter_decoding_enabled) {
- if ((decrypt_len = ws_base64_decode_inplace(decrypt)) == 0) {
+ g_base64_decode_inplace(decrypt, &decrypt_len);
+ decrypt[decrypt_len] = 0;
+ if (decrypt_len == 0) {
/* Go back to the original string */
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset + 10, linelen - 10, ENC_ASCII);
decrypt_len = linelen - 10;
@@ -1099,7 +1113,8 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
if (linelen >= 4) {
if ((smtp_auth_parameter_decoding_enabled) && (code == 334)) {
decrypt = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 4, linelen - 4, ENC_ASCII);
- if ((decrypt_len = ws_base64_decode_inplace(decrypt)) > 0) {
+ if ((g_base64_decode_inplace(decrypt, &decrypt_len)) && decrypt_len > 0) {
+ decrypt[decrypt_len] = 0;
if (g_ascii_strncasecmp(decrypt, "NTLMSSP", 7) == 0) {
base64_string = tvb_get_string_enc(wmem_packet_scope(), tvb, loffset + 4, linelen - 4, ENC_ASCII);
col_append_fstr(pinfo->cinfo, COL_INFO, "%d ", code);
@@ -1288,8 +1303,8 @@ proto_register_smtp(void)
&smtp_data_desegment);
prefs_register_bool_preference(smtp_module, "decryption",
- "Decode base-64-encoded AUTH parameters",
- "Whether the SMTP dissector should decode base-64-encoded AUTH parameters",
+ "Decode Base64 encoded AUTH parameters",
+ "Whether the SMTP dissector should decode Base64 encoded AUTH parameters",
&smtp_auth_parameter_decoding_enabled);
}
diff --git a/epan/tvbuff_base64.c b/epan/tvbuff_base64.c
index 53d50fc94f..2c39c704e0 100644
--- a/epan/tvbuff_base64.c
+++ b/epan/tvbuff_base64.c
@@ -13,17 +13,16 @@
#include <glib.h>
#include <epan/tvbuff.h>
-#include <wsutil/base64.h>
tvbuff_t *
base64_to_tvb(tvbuff_t *parent, const char *base64)
{
tvbuff_t *tvb;
- char *data = g_strdup(base64);
- gint len;
+ char *data;
+ gsize len;
- len = (gint) ws_base64_decode_inplace(data);
- tvb = tvb_new_child_real_data(parent, (const guint8 *)data, len, len);
+ data = g_base64_decode(base64, &len);
+ tvb = tvb_new_child_real_data(parent, (const guint8 *)data, (gint)len, (gint)len);
tvb_set_free_cb(tvb, g_free);
diff --git a/epan/wslua/wslua_byte_array.c b/epan/wslua/wslua_byte_array.c
index c0ca4fae84..bb8bb3911b 100644
--- a/epan/wslua/wslua_byte_array.c
+++ b/epan/wslua/wslua_byte_array.c
@@ -18,7 +18,6 @@
#include "config.h"
#include "wslua.h"
-#include "wsutil/base64.h"
/* WSLUA_CONTINUE_MODULE Tvb */
@@ -243,22 +242,22 @@ WSLUA_METHOD ByteArray_subset(lua_State* L) {
}
WSLUA_METHOD ByteArray_base64_decode(lua_State* L) {
- /* Obtain a base64 decoded `ByteArray`.
+ /* Obtain a Base64 decoded `ByteArray`.
@since 1.11.3
*/
ByteArray ba = checkByteArray(L,1);
ByteArray ba2;
gchar *data;
- size_t len;
+ gsize len;
ba2 = g_byte_array_new();
- data = (gchar*)g_malloc (ba->len + 1);
+ data = (gchar*)g_malloc(ba->len + 1);
memcpy(data, ba->data, ba->len);
data[ba->len] = '\0';
- len = ws_base64_decode_inplace(data);
- g_byte_array_append(ba2,data,(int)len);
+ g_base64_decode_inplace(data, &len);
+ g_byte_array_append(ba2, data, (int)len);
g_free(data);
pushByteArray(L,ba2);