SQ_TYPE_NULL appears to do run-length encoding of nulls; do run-length

encoding of the list of nulls in the protocol tree, so if we have a
ridiculously large number of nulls, we don't have a ridiculously large
number of protocol tree entries, one for each null.  This should
(finally) fix bug 6378.

Add some additional sanity checks to avoid integer overflows and
underflows due to subtracting N from a value not guaranteed to be >= N.

In the big switch statements for AFP command codes, put the break
statement on a separate line, so it's a bit more obvious that the code
isn't falling through.

svn path=/trunk/; revision=39210
This commit is contained in:
Guy Harris 2011-10-02 08:12:08 +00:00
parent 5d342b64ae
commit 3bad9fcc4d
1 changed files with 236 additions and 99 deletions

View File

@ -4185,10 +4185,7 @@ spotlight_dissect_query_loop(tvbuff_t *tvb, proto_tree *tree, gint offset, guint
break;
case SQ_TYPE_NULL:
subquery_count = (gint)(query_data64 >> 32);
j = 0;
while (j++ < subquery_count) {
proto_tree_add_text(tree, tvb, offset, 8, "null");
}
proto_tree_add_text(tree, tvb, offset, query_length, "%u %s", subquery_count, plurality(subquery_count, "null", "nulls"));
count -= subquery_count;
offset += query_length;
break;
@ -4248,8 +4245,8 @@ dissect_spotlight(tvbuff_t *tvb, proto_tree *tree, gint offset)
{
guint encoding;
gint i;
gint querylen;
gint toc_offset;
guint64 toc_offset;
guint64 querylen;
gint toc_entries;
guint64 toc_entry;
@ -4271,19 +4268,60 @@ dissect_spotlight(tvbuff_t *tvb, proto_tree *tree, gint offset)
"Big Endian" : "Litte Endian");
offset += 8;
toc_offset = (gint)(spotlight_ntoh64(tvb, offset, encoding) >> 32) * 8 - 8;
querylen = (gint)(spotlight_ntoh64(tvb, offset, encoding) & 0xffffffff) * 8 - 8;
toc_offset = (spotlight_ntoh64(tvb, offset, encoding) >> 32) * 8;
if (toc_offset < 8) {
proto_tree_add_text(tree,
tvb,
offset,
8,
"ToC Offset: %" G_GINT64_MODIFIER "u < 8 (bogus)",
toc_offset);
return -1;
}
toc_offset -= 8;
if (offset + toc_offset + 8 > G_MAXINT) {
proto_tree_add_text(tree,
tvb,
offset,
8,
"ToC Offset: %" G_GINT64_MODIFIER "u > %u (bogus)",
toc_offset,
G_MAXINT - 8 - offset);
return -1;
}
querylen = (spotlight_ntoh64(tvb, offset, encoding) & 0xffffffff) * 8;
if (querylen < 8) {
proto_tree_add_text(tree,
tvb,
offset,
8,
"ToC Offset: %" G_GINT64_MODIFIER "u Bytes, Query length: %" G_GINT64_MODIFIER "u < 8 (bogus)",
toc_offset,
querylen);
return -1;
}
querylen -= 8;
if (querylen > G_MAXINT) {
proto_tree_add_text(tree,
tvb,
offset,
8,
"ToC Offset: %" G_GINT64_MODIFIER "u Bytes, Query length: %" G_GINT64_MODIFIER "u > %u (bogus)",
toc_offset,
querylen,
G_MAXINT);
return -1;
}
proto_tree_add_text(tree,
tvb,
offset,
8,
"ToC Offset: %u Bytes, Query length: %u Bytes",
"ToC Offset: %" G_GINT64_MODIFIER "u Bytes, Query length: %" G_GINT64_MODIFIER "u Bytes",
toc_offset,
querylen);
offset += 8;
toc_offset += offset;
toc_entries = (gint)(spotlight_ntoh64(tvb, toc_offset, encoding) & 0xffff) - 1;
toc_entries = (gint)(spotlight_ntoh64(tvb, offset + toc_offset, encoding) & 0xffff);
item_queries_data = proto_tree_add_text(tree,
tvb,
@ -4293,10 +4331,20 @@ dissect_spotlight(tvbuff_t *tvb, proto_tree *tree, gint offset)
sub_tree_queries = proto_item_add_subtree(item_queries_data, ett_afp_spotlight_queries);
/* Queries */
offset = spotlight_dissect_query_loop(tvb, sub_tree_queries, offset, SQ_CPX_TYPE_ARRAY, INT_MAX, toc_offset + 8, encoding);
offset = spotlight_dissect_query_loop(tvb, sub_tree_queries, offset, SQ_CPX_TYPE_ARRAY, INT_MAX, offset + toc_offset + 8, encoding);
/* ToC */
offset = toc_offset;
offset += toc_offset;
if (toc_entries < 1) {
item_toc = proto_tree_add_text(tree,
tvb,
offset,
querylen - toc_offset,
"Complex types ToC (%u < 1 - bogus)",
toc_entries);
return -1;
}
toc_entries -= 1;
item_toc = proto_tree_add_text(tree,
tvb,
offset,
@ -4689,139 +4737,197 @@ dissect_afp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset++;
switch(afp_command) {
case AFP_BYTELOCK:
offset = dissect_query_afp_byte_lock(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_byte_lock(tvb, pinfo, afp_tree, offset);
break;
case AFP_BYTELOCK_EXT:
offset = dissect_query_afp_byte_lock_ext(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_byte_lock_ext(tvb, pinfo, afp_tree, offset);
break;
case AFP_OPENDT: /* same as close vol */
case AFP_FLUSH:
case AFP_CLOSEVOL:
offset = dissect_query_afp_with_vol_id(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_with_vol_id(tvb, pinfo, afp_tree, offset);
break;
case AFP_CLOSEDIR:
/* offset = dissect_query_afp_close_dir(tvb, pinfo, afp_tree, offset);break; */
/* offset = dissect_query_afp_close_dir(tvb, pinfo, afp_tree, offset); */
break;
case AFP_CLOSEDT:
offset = dissect_query_afp_close_dt(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_close_dt(tvb, pinfo, afp_tree, offset);
break;
case AFP_FLUSHFORK: /* same packet as closefork */
case AFP_SYNCFORK:
case AFP_CLOSEFORK:
offset = dissect_query_afp_with_fork(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_with_fork(tvb, pinfo, afp_tree, offset);
break;
case AFP_COPYFILE:
offset = dissect_query_afp_copy_file(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_copy_file(tvb, pinfo, afp_tree, offset);
break;
case AFP_CREATEFILE:
offset = dissect_query_afp_create_file(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_create_file(tvb, pinfo, afp_tree, offset);
break;
case AFP_DISCTOLDSESS:
offset = dissect_query_afp_disconnect_old_session(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_disconnect_old_session(tvb, pinfo, afp_tree, offset);
break;
case AFP_ENUMERATE_EXT2:
offset = dissect_query_afp_enumerate_ext2(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_enumerate_ext2(tvb, pinfo, afp_tree, offset);
break;
case AFP_ENUMERATE_EXT:
case AFP_ENUMERATE:
offset = dissect_query_afp_enumerate(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_enumerate(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETFORKPARAM:
offset = dissect_query_afp_get_fork_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_fork_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETSESSTOKEN:
offset = dissect_query_afp_get_session_token(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_session_token(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETUSERINFO:
offset = dissect_query_afp_get_user_info(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_user_info(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETSRVINFO:
/* offset = dissect_query_afp_get_server_info(tvb, pinfo, afp_tree, offset);break; */
/* offset = dissect_query_afp_get_server_info(tvb, pinfo, afp_tree, offset); */
break;
case AFP_GETSRVPARAM:
break; /* no parameters */
case AFP_GETVOLPARAM:
offset = dissect_query_afp_get_vol_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_vol_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_LOGIN_EXT:
offset = dissect_query_afp_login_ext(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_login_ext(tvb, pinfo, afp_tree, offset);
break;
case AFP_LOGIN:
offset = dissect_query_afp_login(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_login(tvb, pinfo, afp_tree, offset);
break;
case AFP_LOGINCONT:
case AFP_LOGOUT:
break;
case AFP_MAPID:
offset = dissect_query_afp_map_id(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_map_id(tvb, pinfo, afp_tree, offset);
break;
case AFP_MAPNAME:
offset = dissect_query_afp_map_name(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_map_name(tvb, pinfo, afp_tree, offset);
break;
case AFP_MOVE:
offset = dissect_query_afp_move(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_move(tvb, pinfo, afp_tree, offset);
break;
case AFP_OPENVOL:
offset = dissect_query_afp_open_vol(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_open_vol(tvb, pinfo, afp_tree, offset);
break;
case AFP_OPENDIR:
break;
case AFP_OPENFORK:
offset = dissect_query_afp_open_fork(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_open_fork(tvb, pinfo, afp_tree, offset);
break;
case AFP_READ:
offset = dissect_query_afp_read(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_read(tvb, pinfo, afp_tree, offset);
break;
case AFP_READ_EXT:
offset = dissect_query_afp_read_ext(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_read_ext(tvb, pinfo, afp_tree, offset);
break;
case AFP_RENAME:
offset = dissect_query_afp_rename(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_rename(tvb, pinfo, afp_tree, offset);
break;
case AFP_SETDIRPARAM:
offset = dissect_query_afp_set_dir_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_set_dir_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_SETFILEPARAM:
offset = dissect_query_afp_set_file_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_set_file_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_SETFORKPARAM:
offset = dissect_query_afp_set_fork_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_set_fork_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_SETVOLPARAM:
offset = dissect_query_afp_set_vol_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_set_vol_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_WRITE:
offset = dissect_query_afp_write(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_write(tvb, pinfo, afp_tree, offset);
break;
case AFP_WRITE_EXT:
offset = dissect_query_afp_write_ext(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_write_ext(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETFLDRPARAM:
offset = dissect_query_afp_get_fldr_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_fldr_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_SETFLDRPARAM:
offset = dissect_query_afp_set_fldr_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_set_fldr_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_CHANGEPW:
break;
case AFP_GETSRVRMSG:
offset = dissect_query_afp_get_server_message(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_server_message(tvb, pinfo, afp_tree, offset);
break;
case AFP_DELETE: /* same as create_id */
case AFP_CREATEDIR:
case AFP_CREATEID:
offset = dissect_query_afp_create_id(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_create_id(tvb, pinfo, afp_tree, offset);
break;
case AFP_DELETEID:
offset = dissect_query_afp_delete_id(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_delete_id(tvb, pinfo, afp_tree, offset);
break;
case AFP_RESOLVEID:
offset = dissect_query_afp_resolve_id(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_resolve_id(tvb, pinfo, afp_tree, offset);
break;
case AFP_EXCHANGEFILE:
offset = dissect_query_afp_exchange_file(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_exchange_file(tvb, pinfo, afp_tree, offset);
break;
case AFP_CATSEARCH_EXT:
offset = dissect_query_afp_cat_search_ext(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_cat_search_ext(tvb, pinfo, afp_tree, offset);
break;
case AFP_CATSEARCH:
offset = dissect_query_afp_cat_search(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_cat_search(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETICON:
offset = dissect_query_afp_get_icon(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_icon(tvb, pinfo, afp_tree, offset);
break;
case AFP_GTICNINFO:
offset = dissect_query_afp_get_icon_info(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_icon_info(tvb, pinfo, afp_tree, offset);
break;
case AFP_ADDAPPL:
offset = dissect_query_afp_add_appl(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_add_appl(tvb, pinfo, afp_tree, offset);
break;
case AFP_RMVAPPL:
offset = dissect_query_afp_rmv_appl(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_rmv_appl(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETAPPL:
offset = dissect_query_afp_get_appl(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_appl(tvb, pinfo, afp_tree, offset);
break;
case AFP_ADDCMT:
offset = dissect_query_afp_add_cmt(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_add_cmt(tvb, pinfo, afp_tree, offset);
break;
case AFP_RMVCMT: /* same as get_cmt */
case AFP_GETCMT:
offset = dissect_query_afp_get_cmt(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_cmt(tvb, pinfo, afp_tree, offset);
break;
case AFP_ADDICON:
offset = dissect_query_afp_add_icon(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_add_icon(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETEXTATTR:
offset = dissect_query_afp_get_ext_attr(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_ext_attr(tvb, pinfo, afp_tree, offset);
break;
case AFP_SETEXTATTR:
offset = dissect_query_afp_set_ext_attr(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_set_ext_attr(tvb, pinfo, afp_tree, offset);
break;
case AFP_LISTEXTATTR:
offset = dissect_query_afp_list_ext_attrs(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_list_ext_attrs(tvb, pinfo, afp_tree, offset);
break;
case AFP_REMOVEATTR:
offset = dissect_query_afp_remove_ext_attr(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_remove_ext_attr(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETACL:
offset = dissect_query_afp_get_acl(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_get_acl(tvb, pinfo, afp_tree, offset);
break;
case AFP_SETACL:
offset = dissect_query_afp_set_acl(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_set_acl(tvb, pinfo, afp_tree, offset);
break;
case AFP_ACCESS:
offset = dissect_query_afp_access(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_access(tvb, pinfo, afp_tree, offset);
break;
case AFP_SYNCDIR:
offset = dissect_query_afp_with_did(tvb, pinfo, afp_tree, offset);break;
offset = dissect_query_afp_with_did(tvb, pinfo, afp_tree, offset);
break;
case AFP_SPOTLIGHTRPC:
offset = dissect_query_afp_spotlight(tvb, pinfo, afp_tree, offset, request_val);
if (offset == -1)
return; /* bogus spotlight RPC */
break;
}
}
@ -4863,66 +4969,97 @@ dissect_afp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
switch(afp_command) {
case AFP_BYTELOCK:
offset = dissect_reply_afp_byte_lock(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_byte_lock(tvb, pinfo, afp_tree, offset);
break;
case AFP_BYTELOCK_EXT:
offset = dissect_reply_afp_byte_lock_ext(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_byte_lock_ext(tvb, pinfo, afp_tree, offset);
break;
case AFP_ENUMERATE_EXT2:
case AFP_ENUMERATE_EXT:
offset = dissect_reply_afp_enumerate_ext(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_enumerate_ext(tvb, pinfo, afp_tree, offset);
break;
case AFP_ENUMERATE:
offset = dissect_reply_afp_enumerate(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_enumerate(tvb, pinfo, afp_tree, offset);
break;
case AFP_OPENVOL:
offset = dissect_reply_afp_open_vol(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_open_vol(tvb, pinfo, afp_tree, offset);
break;
case AFP_OPENFORK:
offset = dissect_reply_afp_open_fork(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_open_fork(tvb, pinfo, afp_tree, offset);
break;
case AFP_RESOLVEID:
case AFP_GETFORKPARAM:
offset =dissect_reply_afp_get_fork_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_fork_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETUSERINFO:
offset = dissect_reply_afp_get_user_info(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_user_info(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETSRVPARAM:
offset = dissect_reply_afp_get_server_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_server_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETSRVRMSG:
offset = dissect_reply_afp_get_server_message(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_server_message(tvb, pinfo, afp_tree, offset);
break;
case AFP_CREATEDIR:
offset = dissect_reply_afp_create_dir(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_create_dir(tvb, pinfo, afp_tree, offset);
break;
case AFP_MAPID:
offset = dissect_reply_afp_map_id(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_map_id(tvb, pinfo, afp_tree, offset);
break;
case AFP_MAPNAME:
offset = dissect_reply_afp_map_name(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_map_name(tvb, pinfo, afp_tree, offset);
break;
case AFP_MOVE: /* same as create_id */
case AFP_CREATEID:
offset = dissect_reply_afp_create_id(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_create_id(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETSESSTOKEN:
offset = dissect_reply_afp_get_session_token(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_session_token(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETVOLPARAM:
offset = dissect_reply_afp_get_vol_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_vol_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETFLDRPARAM:
offset = dissect_reply_afp_get_fldr_param(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_fldr_param(tvb, pinfo, afp_tree, offset);
break;
case AFP_OPENDT:
offset = dissect_reply_afp_open_dt(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_open_dt(tvb, pinfo, afp_tree, offset);
break;
case AFP_CATSEARCH_EXT:
offset = dissect_reply_afp_cat_search_ext(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_cat_search_ext(tvb, pinfo, afp_tree, offset);
break;
case AFP_CATSEARCH:
offset = dissect_reply_afp_cat_search(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_cat_search(tvb, pinfo, afp_tree, offset);
break;
case AFP_GTICNINFO:
offset = dissect_reply_afp_get_icon_info(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_icon_info(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETAPPL:
offset = dissect_reply_afp_get_appl(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_appl(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETCMT:
offset = dissect_reply_afp_get_cmt(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_cmt(tvb, pinfo, afp_tree, offset);
break;
case AFP_WRITE:
offset = dissect_reply_afp_write(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_write(tvb, pinfo, afp_tree, offset);
break;
case AFP_WRITE_EXT:
offset = dissect_reply_afp_write_ext(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_write_ext(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETEXTATTR:
offset = dissect_reply_afp_get_ext_attr(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_ext_attr(tvb, pinfo, afp_tree, offset);
break;
case AFP_LISTEXTATTR:
offset = dissect_reply_afp_list_ext_attrs(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_list_ext_attrs(tvb, pinfo, afp_tree, offset);
break;
case AFP_GETACL:
offset = dissect_reply_afp_get_acl(tvb, pinfo, afp_tree, offset);break;
offset = dissect_reply_afp_get_acl(tvb, pinfo, afp_tree, offset);
break;
case AFP_SPOTLIGHTRPC:
offset = dissect_reply_afp_spotlight(tvb, pinfo, afp_tree, offset, request_val);break;
offset = dissect_reply_afp_spotlight(tvb, pinfo, afp_tree, offset, request_val);
if (offset == -1)
return; /* bogus */
break;
}
}
if (offset < len) {