(/home/sate/Testcases/c/cve/wireshark-1.2.0/epan/dissectors/packet-acn.c) |
| |
| 1076 | | | dissect_acn_dmp_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, acn_pdu_offsets *last_pdu_offsets) |
| 1077 | | | { |
| 1078 | | | |
| 1079 | | | guint8 pdu_flags; |
| 1080 | | | guint32 pdu_start; |
| 1081 | | | guint32 pdu_length; |
| 1082 | | | guint32 pdu_flvh_length; |
| 1083 | | | acn_pdu_offsets pdu_offsets = {0,0,0,0,0}; |
| 1084 | | | guint8 D; |
| 1085 | | | guint8 octet; |
| 1086 | | | guint32 length1; |
| 1087 | | | guint32 length2; |
| 1088 | | | guint32 length3; |
| 1089 | | | guint32 vector_offset; |
| 1090 | | | guint32 ; |
| 1091 | | | guint32 data_offset; |
| 1092 | | | guint32 old_offset; |
| 1093 | | | guint32 end_offset; |
| 1094 | | | guint32 data_length; |
| 1095 | | | guint32 address_count; |
| 1096 | | | |
| 1097 | | | proto_item *ti, *pi; |
| 1098 | | | proto_tree *pdu_tree = NULL; |
| 1099 | | | proto_tree *flag_tree = NULL; |
| 1100 | | | |
| 1101 | | | |
| 1102 | | | const gchar *name; |
| 1103 | | | acn_dmp_adt_type adt = {0,0,0,0,0,0}; |
| 1104 | | | acn_dmp_adt_type adt2 = {0,0,0,0,0,0}; |
| 1105 | | | guint32 vector; |
| 1106 | | | |
| 1107 | | | |
| 1108 | | | pdu_start = offset; |
| 1109 | | | pdu_offsets.start = pdu_start; |
| 1110 | | | |
| 1111 | | | |
| 1112 | | | octet = tvb_get_guint8(tvb, offset++); |
| 1113 | | | pdu_flags = octet & 0xf0; |
| 1114 | | | length1 = octet & 0x0f; |
| 1115 | | | length2 = tvb_get_guint8(tvb, offset++); |
| 1116 | | | |
| 1117 | | | |
| 1118 | | | |
| 1119 | | | if (pdu_flags & ACN_PDU_FLAG_L) { |
| 1120 | | | length3 = tvb_get_guint8(tvb, offset); |
| 1121 | | | offset++; |
| 1122 | | | pdu_length = length3 | (length2 << 8) | (length1 << 16); |
| 1123 | | | pdu_flvh_length = 3; |
| 1124 | | | } else { |
| 1125 | | | pdu_length = length2 | (length1 << 8); |
| 1126 | | | pdu_flvh_length = 2; |
| 1127 | | | } |
| 1128 | | | |
| 1129 | | | |
| 1130 | | | |
| 1131 | | | ti = proto_tree_add_item(tree, hf_acn_pdu, tvb, pdu_start, pdu_length, FALSE); |
| 1132 | | | pdu_tree = proto_item_add_subtree(ti, ett_acn_dmp_pdu); |
| 1133 | | | |
| 1134 | | | |
| 1135 | | | pi = proto_tree_add_uint(pdu_tree, hf_acn_pdu_flags, tvb, pdu_start, 1, pdu_flags); |
| 1136 | | | flag_tree = proto_item_add_subtree(pi, ett_acn_pdu_flags); |
| 1137 | | | proto_tree_add_item(flag_tree, hf_acn_pdu_flag_l, tvb, pdu_start, 1, FALSE); |
| 1138 | | | proto_tree_add_item(flag_tree, hf_acn_pdu_flag_v, tvb, pdu_start, 1, FALSE); |
| 1139 | | | proto_tree_add_item(flag_tree, hf_acn_pdu_flag_h, tvb, pdu_start, 1, FALSE); |
| 1140 | | | proto_tree_add_item(flag_tree, hf_acn_pdu_flag_d, tvb, pdu_start, 1, FALSE); |
| 1141 | | | |
| 1142 | | | |
| 1143 | | | proto_tree_add_uint(pdu_tree, hf_acn_pdu_length, tvb, pdu_start, pdu_flvh_length, pdu_length); |
| 1144 | | | |
| 1145 | | | |
| 1146 | | | if (pdu_flags & ACN_PDU_FLAG_V) { |
| 1147 | | | |
| 1148 | | | vector_offset = offset; |
| 1149 | | | last_pdu_offsets->vector = offset; |
| 1150 | | | offset++; |
| 1151 | | | pdu_flvh_length++; |
| 1152 | | | } else { |
| 1153 | | | |
| 1154 | | | vector_offset = last_pdu_offsets->vector; |
| 1155 | | | } |
| 1156 | | | |
| 1157 | | | |
| 1158 | | | |
| 1159 | | | vector = tvb_get_guint8(tvb, vector_offset); |
| 1160 | | | proto_tree_add_uint(pdu_tree, hf_acn_dmp_vector, tvb, vector_offset, 1, vector); |
| 1161 | | | |
| 1162 | | | |
| 1163 | | | name = val_to_str(vector, acn_dmp_vector_vals, "not valid (%d)"); |
| 1164 | | | proto_item_append_text(ti, ": "); |
| 1165 | | | proto_item_append_text(ti, "%s", name); |
| 1166 | | | |
| 1167 | | | |
| 1168 | | | if (pdu_flags & ACN_PDU_FLAG_H) { |
| 1169 | | | |
| 1170 | | | = offset; |
| 1171 | | | last_pdu_offsets-> = offset; |
| 1172 | | | offset++; |
| 1173 | | | pdu_flvh_length++; |
| 1174 | | | } else { |
| 1175 | | | |
| 1176 | | | = last_pdu_offsets->; |
| 1177 | | | } |
| 1178 | | | |
| 1179 | | | |
| 1180 | | | |
| 1181 | | | acn_add_dmp_address_type(tvb, pinfo, pdu_tree, , &adt); |
| 1182 | | | |
| 1183 | | | |
| 1184 | | | if (pdu_flags & ACN_PDU_FLAG_D) { |
| 1185 | | | |
| 1186 | | | data_offset = offset; |
| 1187 | | | data_length = pdu_length - pdu_flvh_length; |
| 1188 | | | last_pdu_offsets->data = offset; |
| 1189 | | | last_pdu_offsets->data_length = data_length; |
| 1190 | | | } else { |
| 1191 | | | |
| 1192 | | | data_offset = last_pdu_offsets->data; |
| 1193 | | | data_length = last_pdu_offsets->data_length; |
| 1194 | | | } |
| 1195 | | | end_offset = data_offset + data_length; |
| 1196 | | | |
| 1197 | | | switch (vector) { |
| 1198 | | | case ACN_DMP_VECTOR_UNKNOWN: |
| 1199 | | | break; |
| 1200 | | | case ACN_DMP_VECTOR_GET_PROPERTY: |
| 1201 | | | |
| 1202 | | | while (data_offset < end_offset) { |
| 1203 | | | old_offset = data_offset; |
| 1204 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1205 | | | if (old_offset == data_offset) break; |
| 1206 | | | } |
| 1207 | | | break; |
| 1208 | | | case ACN_DMP_VECTOR_SET_PROPERTY: |
| 1209 | | | |
| 1210 | | | |
| 1211 | | | |
| 1212 | | | while (data_offset < end_offset) { |
| 1213 | | | old_offset = data_offset; |
| 1214 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1215 | | | if (old_offset == data_offset) break; |
| 1216 | | | |
| 1217 | | | adt.data_length = data_length - (data_offset - old_offset); |
| 1218 | | | old_offset = data_offset; |
| 1219 | | | data_offset = acn_add_dmp_data(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1220 | | | if (old_offset == data_offset) break; |
| 1221 | | | } |
| 1222 | | | break; |
| 1223 | | | case ACN_DMP_VECTOR_GET_PROPERTY_REPLY: |
| 1224 | | | |
| 1225 | | | |
| 1226 | | | |
| 1227 | | | while (data_offset < end_offset) { |
| 1228 | | | old_offset = data_offset; |
| 1229 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1230 | | | if (old_offset == data_offset) break; |
| 1231 | | | |
| 1232 | | | adt.data_length = data_length - (data_offset - old_offset); |
| 1233 | | | old_offset = data_offset; |
| 1234 | | | data_offset = acn_add_dmp_data(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1235 | | | if (old_offset == data_offset) break; |
| 1236 | | | } |
| 1237 | | | break; |
| 1238 | | | case ACN_DMP_VECTOR_EVENT: |
| 1239 | | | |
| 1240 | | | |
| 1241 | | | |
| 1242 | | | while (data_offset < end_offset) { |
| 1243 | | | old_offset = data_offset; |
| 1244 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1245 | | | if (old_offset == data_offset) break; |
| 1246 | | | |
| 1247 | | | adt.data_length = data_length - (data_offset - old_offset); |
| 1248 | | | old_offset = data_offset; |
| 1249 | | | data_offset = acn_add_dmp_data(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1250 | | | if (old_offset == data_offset) break; |
| 1251 | | | } |
| 1252 | | | break; |
| 1253 | | | case ACN_DMP_VECTOR_MAP_PROPERTY: |
| 1254 | | | |
| 1255 | | | data_offset = acn_add_dmp_address_type(tvb, pinfo, pdu_tree, data_offset, &adt2); |
| 1256 | | | |
| 1257 | | | while (data_offset < end_offset) { |
| 1258 | | | |
| 1259 | | | old_offset = data_offset; |
| 1260 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1261 | | | if (old_offset == data_offset) break; |
| 1262 | | | D = (adt.flags);
x /home/sate/Testcases/c/cve/wireshark-1.2.0/epan/dissectors/packet-acn.h |
| |
40 | #define ACN_DMP_ADT_FLAG_D 0x30 /* D1, D0 = Specify non-range or range address, single data, equal size or mixed size data array */ |
| |
|
| 1263 | | | switch (D) { |
| 1264 | | | case ACN_DMP_ADT_D_NS: |
| 1265 | | | address_count = 1; |
| 1266 | | | break; |
| 1267 | | | case ACN_DMP_ADT_D_RS: |
| 1268 | | | address_count = 1; |
| 1269 | | | break; |
| 1270 | | | case ACN_DMP_ADT_D_RE: |
| 1271 | | | address_count = adt.count; |
| 1272 | | | break; |
| 1273 | | | |
| 1274 | | | default: |
| 1275 | | | |
| 1276 | | | return pdu_start + pdu_length; |
| 1277 | | | break; |
Unreachable Control Flow
The highlighted code will not execute under any circumstances. This may be because of: |
|
| 1278 | | | } |
| 1279 | | | |
| 1280 | | | |
| 1281 | | | while (address_count > 0) { |
| 1282 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt2); |
| 1283 | | | address_count--; |
| 1284 | | | } |
| 1285 | | | } |
| 1286 | | | break; |
| 1287 | | | case ACN_DMP_VECTOR_UNMAP_PROPERTY: |
| 1288 | | | |
| 1289 | | | while (data_offset < end_offset) { |
| 1290 | | | old_offset = data_offset; |
| 1291 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1292 | | | if (old_offset == data_offset) break; |
| 1293 | | | } |
| 1294 | | | break; |
| 1295 | | | case ACN_DMP_VECTOR_SUBSCRIBE: |
| 1296 | | | |
| 1297 | | | while (data_offset < end_offset) { |
| 1298 | | | old_offset = data_offset; |
| 1299 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1300 | | | if (old_offset == data_offset) break; |
| 1301 | | | } |
| 1302 | | | break; |
| 1303 | | | case ACN_DMP_VECTOR_UNSUBSCRIBE: |
| 1304 | | | |
| 1305 | | | while (data_offset < end_offset) { |
| 1306 | | | old_offset = data_offset; |
| 1307 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1308 | | | if (old_offset == data_offset) break; |
| 1309 | | | } |
| 1310 | | | break; |
| 1311 | | | case ACN_DMP_VECTOR_GET_PROPERTY_FAIL: |
| 1312 | | | |
| 1313 | | | while (data_offset < end_offset) { |
| 1314 | | | old_offset = data_offset; |
| 1315 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1316 | | | if (old_offset == data_offset) break; |
| 1317 | | | |
| 1318 | | | adt.data_length = data_length - (data_offset - old_offset); |
| 1319 | | | old_offset = data_offset; |
| 1320 | | | data_offset = acn_add_dmp_reason_codes(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1321 | | | if (old_offset == data_offset) break; |
| 1322 | | | } |
| 1323 | | | break; |
| 1324 | | | case ACN_DMP_VECTOR_SET_PROPERTY_FAIL: |
| 1325 | | | |
| 1326 | | | while (data_offset < end_offset) { |
| 1327 | | | old_offset = data_offset; |
| 1328 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1329 | | | if (old_offset == data_offset) break; |
| 1330 | | | |
| 1331 | | | adt.data_length = data_length - (data_offset - old_offset); |
| 1332 | | | old_offset = data_offset; |
| 1333 | | | data_offset = acn_add_dmp_reason_codes(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1334 | | | if (old_offset == data_offset) break; |
| 1335 | | | } |
| 1336 | | | break; |
| 1337 | | | case ACN_DMP_VECTOR_MAP_PROPERTY_FAIL: |
| 1338 | | | |
| 1339 | | | while (data_offset < end_offset) { |
| 1340 | | | old_offset = data_offset; |
| 1341 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1342 | | | if (old_offset == data_offset) break; |
| 1343 | | | |
| 1344 | | | adt.data_length = data_length - (data_offset - old_offset); |
| 1345 | | | old_offset = data_offset; |
| 1346 | | | data_offset = acn_add_dmp_reason_codes(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1347 | | | if (old_offset == data_offset) break; |
| 1348 | | | } |
| 1349 | | | break; |
| 1350 | | | case ACN_DMP_VECTOR_SUBSCRIBE_ACCEPT: |
| 1351 | | | |
| 1352 | | | while (data_offset < end_offset) { |
| 1353 | | | old_offset = data_offset; |
| 1354 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1355 | | | if (old_offset == data_offset) break; |
| 1356 | | | } |
| 1357 | | | break; |
| 1358 | | | case ACN_DMP_VECTOR_SUBSCRIBE_REJECT: |
| 1359 | | | |
| 1360 | | | while (data_offset < end_offset) { |
| 1361 | | | old_offset = data_offset; |
| 1362 | | | data_offset = acn_add_dmp_address(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1363 | | | if (old_offset == data_offset) break; |
| 1364 | | | |
| 1365 | | | adt.data_length = data_length - (data_offset - old_offset); |
| 1366 | | | old_offset = data_offset; |
| 1367 | | | data_offset = acn_add_dmp_reason_codes(tvb, pinfo, pdu_tree, data_offset, &adt); |
| 1368 | | | if (old_offset == data_offset) break; |
| 1369 | | | } |
| 1370 | | | break; |
| 1371 | | | case ACN_DMP_VECTOR_ALLOCATE_MAP: |
| 1372 | | | |
| 1373 | | | break; |
| 1374 | | | case ACN_DMP_VECTOR_ALLOCATE_MAP_REPLY: |
| 1375 | | | |
| 1376 | | | proto_tree_add_item(pdu_tree, hf_acn_dmp_reason_code, tvb, data_offset, 1, FALSE); |
| 1377 | | | data_offset++; |
| 1378 | | | case ACN_DMP_VECTOR_DEALLOCATE_MAP: |
| 1379 | | | |
| 1380 | | | break; |
| 1381 | | | } |
| 1382 | | | |
| 1383 | | | return pdu_start + pdu_length; |
| 1384 | | | } |
| |