From Herbert Lischka:

Resolves problems reported in bug #5090
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=5090

I have 3 potentially risks of endless loop eliminated
the rest is cosmetic

svn path=/trunk/; revision=33765
This commit is contained in:
Anders Broman 2010-08-11 11:43:04 +00:00
parent 4b9747a74d
commit 90a6c7d484
1 changed files with 147 additions and 47 deletions

View File

@ -2539,7 +2539,25 @@ BACnetObjectType [] = {
{27,"trend-log-multiple"},
{28,"load-control"},
{29,"structured-view"},
{30,"access-door"},
{30,"access-door"}, /* 30-37 added with addanda 135-2008j */
{32,"access-credential"},
{33,"access-point"},
{34,"access-rights"},
{35,"access-user"},
{36,"access-zone"},
{37,"credential-data-input"},
{39,"bitstring-value"}, /* 39-50 added with addenda 135-2008w */
{40,"characterstring-value"},
{41,"date-pattern-value"},
{42,"date-value"},
{43,"datetime-pattern-value"},
{44,"datetime-value"},
{45,"integer-value"},
{46,"large-analog-value"},
{47,"octetstring-value"},
{48,"positive-Integer-value"},
{49,"time-pattern-value"},
{50,"time-value"},
{0, NULL}
/* Enumerated values 0-127 are reserved for definition by ASHRAE.
Enumerated values 128-1023 may be used by others subject to
@ -3040,6 +3058,87 @@ BACnetPropertyIdentifier [] = {
{233,"lock-status"},
{234,"masked-alarm-values"},
{235,"secured-status"},
{244,"absentee-limit"}, /* added with addenda 135-2008j */
{245,"access-alarm-events"},
{246,"access-doors"},
{247,"access-event"},
{248,"access-event-authentication-factor"},
{249,"access-event-credential"},
{250,"access-event-time"},
{251,"access-transaction<6F>events"},
{252,"accompaniment"},
{253,"accompaniment-time"},
{254,"activation-time"},
{255,"active-authentication-policy"},
{256,"assigned-access-rights"},
{257,"authentication-factors"},
{258,"authentication-policy-list"},
{259,"authentication-policy-names"},
{260,"authentication-status"},
{261,"authorization-mode"},
{262,"belongs-to"},
{263,"credential-disable"},
{264,"credential-status"},
{265,"credentials"},
{266,"credentials-in-zone"},
{267,"days-remaining"},
{268,"entry-points"},
{269,"exit-points"},
{270,"expiry-time"},
{271,"extended-time-enable"},
{272,"failed-attempt-events"},
{273,"failed-attempts"},
{274,"failed-attempts-time"},
{275,"last-access-event"},
{276,"last-access-point"},
{277,"last-credential-added"},
{278,"last-credential-added-time"},
{279,"last-credential-removed"},
{280,"last-credential-removed-time"},
{281,"last-use-time"},
{282,"lockout"},
{283,"lockout-relinquish-time"},
{284,"master-exemption"},
{285,"max-failed-attempts"},
{286,"members"},
{287,"muster-point"},
{288,"negative-access-rules"},
{289,"number-of-authentication-policies"},
{290,"occupancy-count"},
{291,"occupancy-count-adjust"},
{292,"occupancy-count-enable"},
{293,"occupancy-exemption"},
{294,"occupancy-lower-limit"},
{295,"occupancy-lower-limit-enforced"},
{296,"occupancy-state"},
{297,"occupancy-upper-limit"},
{298,"occupancy-upper-limit-enforced"},
{299,"passback-exemption"},
{300,"passback-mode"},
{301,"passback-timeout"},
{302,"positive-access-rules"},
{303,"reason-for-disable"},
{304,"supported-formats"},
{305,"supported-format-classes"},
{306,"threat-authority"},
{307,"threat-level"},
{308,"trace-flag"},
{309,"transaction-notification-class"},
{310,"user-external-identifier"},
{311,"user-information-reference"},
/* enumeration values 312-316 reserved for future addenda */
{317,"user-name"},
{318,"user-type"},
{319,"uses-remaining"},
{320,"zone-from"},
{321,"zone-to"},
{322,"access-event-tag"},
{323,"global-identifier"},
/* enumeration values 324-325 reserved for future addenda */
{326,"verification-time"},
{342,"bit-mask"}, /* addenda 135-2008w */
{343,"bit-text"},
{344,"is-utc"},
{0, NULL}
/* Enumerated values 0-511 are reserved for definition by ASHRAE.
Enumerated values 512-4194303 may be used by others subject to
@ -3263,6 +3362,10 @@ BACnetEventType [] = {
{9,"extended" },
{10,"buffer-ready" },
{11,"unsigned-range" },
{14,"double-out-of-range"}, /* added with addenda 135-2008w */
{15,"signed-out-of-range"},
{16,"unsigned-out-of-range"},
{17,"change-of-characterstring"},
{0,NULL }
/* Enumerated values 0-63 are reserved for definition by ASHRAE.
Enumerated values 64-65535 may be used by others subject to
@ -4797,7 +4900,7 @@ fAddressBinding (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offs
static guint
fActionCommand (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, guint8 tag_match)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no, tag_info;
guint32 lvt;
proto_tree *subtree = tree;
@ -4806,13 +4909,12 @@ fActionCommand (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offse
propertyArrayIndex = -1;
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
if (tag_is_closing(tag_info) ) {
if (tag_no == tag_match) {
return offset;
}
offset += fTagHeaderTree (tvb, subtree, offset,
&tag_no, &tag_info, &lvt);
offset += len;
subtree = tree;
continue;
}
@ -4862,7 +4964,7 @@ fActionCommand (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offse
static guint
fActionList (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no, tag_info;
guint32 lvt;
proto_tree *subtree = tree;
@ -4870,10 +4972,9 @@ fActionList (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
while (tvb_reported_length_remaining(tvb, offset)) {
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
if (tag_is_closing(tag_info)) {
offset += fTagHeaderTree (tvb, subtree, offset,
&tag_no, &tag_info, &lvt);
offset += len;
subtree = tree;
continue;
}
@ -5490,7 +5591,7 @@ fBACnetPropertyValue (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
static guint
fSubscribeCOVPropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no, tag_info;
guint32 lvt;
proto_tree *subtree = tree;
@ -5498,9 +5599,9 @@ fSubscribeCOVPropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
if (tag_is_closing(tag_info)) {
offset += fTagHeaderTree (tvb, subtree, offset, &tag_no, &tag_info, &lvt);
offset += len;
subtree = tree;
continue;
}
@ -5789,7 +5890,7 @@ fUnconfirmedTextMessageRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
static guint
fConfirmedPrivateTransferRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no, tag_info;
guint32 lvt;
proto_tree *subtree = tree;
@ -5798,12 +5899,11 @@ fConfirmedPrivateTransferRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
/* exit loop if nothing happens inside */
while (tvb_reported_length_remaining(tvb, offset)) {
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
if (tag_is_closing(tag_info)) {
if (tag_no == 2) /* Make sure it's the expected tag */
{
offset += fTagHeaderTree (tvb, subtree, offset,
&tag_no, &tag_info, &lvt);
offset += len;
subtree = tree;
continue;
}
@ -6684,7 +6784,7 @@ fUnconfirmedEventNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_t
static guint
fConfirmedCOVNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no, tag_info;
guint32 lvt;
proto_tree *subtree = tree;
@ -6692,11 +6792,9 @@ fConfirmedCOVNotificationRequest (tvbuff_t *tvb, packet_info *pinfo, proto_tree
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
if (tag_is_closing(tag_info)) {
offset += fTagHeaderTree (tvb, subtree, offset,
&tag_no, &tag_info, &lvt);
lastoffset = offset;
offset += len;
subtree = tree;
continue;
}
@ -6987,7 +7085,7 @@ fGetEventInformationACK (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu
static guint
fAddListElementRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no, tag_info;
guint32 lvt;
proto_tree *subtree = tree;
@ -6997,10 +7095,9 @@ fAddListElementRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guin
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
if (tag_is_closing(tag_info)) {
offset += fTagHeaderTree (tvb, subtree, offset,
&tag_no, &tag_info, &lvt);
offset += len;
subtree = tree;
continue;
}
@ -7206,7 +7303,7 @@ fReadPropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
static guint
fReadPropertyAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no, tag_info;
guint32 lvt;
proto_tree *subtree = tree;
@ -7215,10 +7312,9 @@ fReadPropertyAck (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off
propertyArrayIndex = -1;
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
if (tag_is_closing(tag_info)) {
offset += fTagHeaderTree (tvb, tree, offset,
&tag_no, &tag_info, &lvt);
offset += len;
subtree = tree;
continue;
}
@ -7256,11 +7352,10 @@ fWritePropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
/* quit loop if we spot a closing tag */
if (tag_is_closing(tag_info)) {
offset += fTagHeaderTree (tvb, subtree, offset,
&tag_no, &tag_info, &lvt);
subtree = tree;
continue;
break;
}
switch (tag_no) {
@ -7290,16 +7385,16 @@ fWritePropertyRequest(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
static guint
fWriteAccessSpecification (tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint offset)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no, tag_info;
guint32 lvt;
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
/* maybe a listOfwriteAccessSpecifications if we spot a closing tag */
if (tag_is_closing(tag_info)) {
offset += fTagHeaderTree (tvb, subtree, offset,
&tag_no, &tag_info, &lvt);
offset += len;
continue;
}
@ -7504,12 +7599,14 @@ fSpecialEvent (tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint off
{
guint8 tag_no, tag_info;
guint32 lvt;
guint lastoffset = 0;
guint lastoffset = 0, len;
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
/* maybe a SEQUENCE of SpecialEvents if we spot a closing tag */
if (tag_is_closing(tag_info)) {
offset += len;
continue;
}
@ -7548,14 +7645,16 @@ fSpecialEvent (tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree, guint off
static guint
fSelectionCriteria (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no, tag_info;
guint32 lvt;
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
if (tag_is_closing(tag_info)) { /* stop when we hit outer closing tag */
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
/* maybe a listOfSelectionCriteria if we spot a closing tag */
if (tag_is_closing(tag_info)) {
offset += len;
continue;
}
@ -7593,8 +7692,9 @@ fObjectSelectionCriteria (tvbuff_t *tvb, packet_info *pinfo, proto_tree *subtree
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
if (tag_is_closing(tag_info)) { /* stop when we hit outer closing tag */
continue;
/* quit loop if we spot a closing tag */
if (tag_is_closing(tag_info)) {
break;
}
switch (tag_no) {
@ -7692,7 +7792,7 @@ fReadAccessSpecification (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g
static guint
fReadAccessResult (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset)
{
guint lastoffset = 0;
guint lastoffset = 0, len;
guint8 tag_no;
guint8 tag_info;
guint32 lvt;
@ -7701,10 +7801,10 @@ fReadAccessResult (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint of
while (tvb_reported_length_remaining(tvb, offset)) { /* exit loop if nothing happens inside */
lastoffset = offset;
fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
len = fTagHeader (tvb, offset, &tag_no, &tag_info, &lvt);
/* maybe a listOfReadAccessResults if we spot a closing tag here */
if (tag_is_closing(tag_info)) {
offset += fTagHeaderTree (tvb, subtree, offset,
&tag_no, &tag_info, &lvt);
offset += len;
if ((tag_no == 4 || tag_no == 5) && (subtree != tree)) subtree = subtree->parent; /* Value and error have extra subtree */
continue;
}