(/home/sate/Testcases/c/cve/wireshark-1.2.0/epan/dissectors/packet-p_mul.c) |
| |
| 349 | | | static p_mul_seq_val *register_p_mul_id (packet_info *pinfo, address *addr, guint32 dstIP, |
| 350 | | | guint8 pdu_type, guint32 message_id, |
| 351 | | | guint16 seq_no, gint no_missing) |
| 352 | | | { |
| 353 | | | p_mul_seq_val *p_mul_data = NULL, *pkg_data = NULL; |
| 354 | | | p_mul_id_key *p_mul_key = NULL; |
| 355 | | | p_mul_ack_data *ack_data = NULL; |
| 356 | | | nstime_t addr_time = { 0, 0 }, prev_time = { 0, 0 }; |
| 357 | | | guint addr_id = 0, prev_id = 0; |
| 358 | | | guint16 last_found_pdu = 0; |
| 359 | | | gboolean missing_pdu = FALSE, set_address = FALSE; |
| 360 | | | GHashTable *pkg_list = NULL; |
| 361 | | | |
| 362 | | | if (pinfo->in_error_pkt) { |
| 363 | | | |
| 364 | | | return NULL; |
| 365 | | | } |
| 366 | | | |
| 367 | | | p_mul_key = se_alloc (sizeof (p_mul_id_key)); |
Ignored Return Value
The return value of se_alloc() is never checked in the highlighted execution scenario. - If the return value can indicate an error, the error will be ignored if the highlighted code executes.
- The return value of se_alloc() is checked 99% of the time in this project. CodeSonar is configured to enforce Ignored Return Value checks for any function whose return value is checked at least 96% of the time, unless the function is used fewer than 20 times. (To modify these thresholds, use configuration file parameters RETURN_CHECKER_SAMPLE_SIZE and RETURN_CHECKER_RATIO. To exempt se_alloc() from the Ignored Return Value check, use configuration file parameter RETURN_CHECKER_IGNORED_FUNCS).
Show: All events | Only primary events |
|
| 368 | | | |
| 369 | | | if (!pinfo->fd->flags.visited && |
Event 2:
Skipping " if". pinfo->fd->flags.visited evaluates to true.
hide
|
|
| 370 | | | (pdu_type == Address_PDU || pdu_type == Data_PDU || pdu_type == Discard_Message_PDU)) |
| 371 | | | { |
| 372 | | | |
| 373 | | | p_mul_key->id = message_id; |
| 374 | | | p_mul_key->seq = 0; |
| 375 | | | SE_COPY_ADDRESS(&p_mul_key->addr, addr);
x /home/sate/Testcases/c/cve/wireshark-1.2.0/epan/address.h |
| |
116 | #define SE_COPY_ADDRESS(to, from) { \ |
117 | guint8 *SE_COPY_ADDRESS_data; \ |
118 | (to)->type = (from)->type; \ |
119 | (to)->len = (from)->len; \ |
120 | SE_COPY_ADDRESS_data = se_alloc((from)->len); \ |
121 | memcpy(SE_COPY_ADDRESS_data, (from)->data, (from)->len); \ |
122 | (to)->data = SE_COPY_ADDRESS_data; \ |
123 | } |
| |
|
| 376 | | | set_address = TRUE; |
| 377 | | | |
| 378 | | | p_mul_data = (p_mul_seq_val *) g_hash_table_lookup (p_mul_id_hash_table, p_mul_key); |
| 379 | | | |
| 380 | | | if (p_mul_data) { |
| 381 | | | |
| 382 | | | last_found_pdu = p_mul_data->last_found_pdu; |
| 383 | | | p_mul_data->last_found_pdu = seq_no; |
| 384 | | | addr_id = p_mul_data->pdu_id; |
| 385 | | | addr_time = p_mul_data->pdu_time; |
| 386 | | | |
| 387 | | | |
| 388 | | | p_mul_data->prev_pdu_id = pinfo->fd->num; |
| 389 | | | p_mul_data->prev_pdu_time = pinfo->fd->abs_ts; |
| 390 | | | |
| 391 | | | if (pdu_type == Data_PDU && p_mul_data->msg_resend_count == 0 && last_found_pdu != seq_no - 1) { |
| 392 | | | |
| 393 | | | missing_pdu = TRUE; |
| 394 | | | } |
| 395 | | | |
| 396 | | | if (last_found_pdu) { |
| 397 | | | |
| 398 | | | p_mul_key->seq = last_found_pdu; |
| 399 | | | p_mul_data = (p_mul_seq_val *) g_hash_table_lookup (p_mul_id_hash_table, p_mul_key); |
| 400 | | | } |
| 401 | | | |
| 402 | | | if (p_mul_data) { |
| 403 | | | |
| 404 | | | if (p_mul_data->prev_msg_id > 0) { |
| 405 | | | prev_id = p_mul_data->prev_msg_id; |
| 406 | | | } else { |
| 407 | | | prev_id = p_mul_data->pdu_id; |
| 408 | | | } |
| 409 | | | prev_time = p_mul_data->pdu_time; |
| 410 | | | } |
| 411 | | | } else if (pdu_type == Address_PDU) { |
| 412 | | | addr_id = pinfo->fd->num; |
| 413 | | | addr_time = pinfo->fd->abs_ts; |
| 414 | | | } |
| 415 | | | } |
| 416 | | | |
| 417 | | | pkg_list = p_get_proto_data (pinfo->fd, proto_p_mul); |
| 418 | | | if (!pkg_list) { |
Event 3:
Taking true branch. pkg_list evaluates to false.
hide
|
|
| 419 | | | |
| 420 | | | pkg_list = g_hash_table_new (NULL, NULL); |
| 421 | | | p_mul_package_data_list = g_list_append (p_mul_package_data_list, pkg_list); |
| 422 | | | p_add_proto_data (pinfo->fd, proto_p_mul, pkg_list); |
| 423 | | | } |
| 424 | | | |
| 425 | | | if (!pinfo->fd->flags.visited) { |
Event 4:
Taking false branch. pinfo->fd->flags.visited evaluates to true.
hide
|
|
| 426 | | | p_mul_key->id = message_id; |
| 427 | | | p_mul_key->seq = seq_no; |
| 428 | | | if (!set_address) { |
| 429 | | | SE_COPY_ADDRESS(&p_mul_key->addr, addr);
x /home/sate/Testcases/c/cve/wireshark-1.2.0/epan/address.h |
| |
116 | #define SE_COPY_ADDRESS(to, from) { \ |
117 | guint8 *SE_COPY_ADDRESS_data; \ |
118 | (to)->type = (from)->type; \ |
119 | (to)->len = (from)->len; \ |
120 | SE_COPY_ADDRESS_data = se_alloc((from)->len); \ |
121 | memcpy(SE_COPY_ADDRESS_data, (from)->data, (from)->len); \ |
122 | (to)->data = SE_COPY_ADDRESS_data; \ |
123 | } |
| |
|
| 430 | | | } |
| 431 | | | p_mul_data = (p_mul_seq_val *) g_hash_table_lookup (p_mul_id_hash_table, p_mul_key); |
| 432 | | | |
| 433 | | | if (p_mul_data) { |
| 434 | | | if (pdu_type == Ack_PDU) { |
| 435 | | | |
| 436 | | | if (no_missing == 0) { |
| 437 | | | ack_data = g_hash_table_lookup (p_mul_data->ack_data, GUINT_TO_POINTER(dstIP)); |
| 438 | | | if (!ack_data) { |
| 439 | | | |
| 440 | | | ack_data = se_alloc0 (sizeof (p_mul_ack_data)); |
| 441 | | | ack_data->ack_id = pinfo->fd->num; |
| 442 | | | g_hash_table_insert (p_mul_data->ack_data, GUINT_TO_POINTER(dstIP), ack_data); |
| 443 | | | } else { |
| 444 | | | |
| 445 | | | ack_data->ack_resend_count++; |
| 446 | | | } |
| 447 | | | } |
| 448 | | | } else { |
| 449 | | | |
| 450 | | | p_mul_data->msg_resend_count++; |
| 451 | | | p_mul_data->prev_msg_id = pinfo->fd->num; |
| 452 | | | p_mul_data->prev_msg_time = p_mul_data->pdu_time; |
| 453 | | | p_mul_data->pdu_time = pinfo->fd->abs_ts; |
| 454 | | | |
| 455 | | | if (pdu_type == Data_PDU) { |
| 456 | | | p_mul_data->prev_pdu_id = prev_id; |
| 457 | | | p_mul_data->prev_pdu_time = prev_time; |
| 458 | | | } |
| 459 | | | } |
| 460 | | | } else { |
| 461 | | | |
| 462 | | | p_mul_data = se_alloc0 (sizeof (p_mul_seq_val)); |
| 463 | | | p_mul_data->msg_type = pdu_type; |
| 464 | | | if (pdu_type == Address_PDU || pdu_type == Ack_PDU) { |
| 465 | | | p_mul_data->ack_data = g_hash_table_new (NULL, NULL); |
| 466 | | | } |
| 467 | | | |
| 468 | | | if (pdu_type == Ack_PDU) { |
| 469 | | | |
| 470 | | | ack_data = se_alloc0 (sizeof (p_mul_ack_data)); |
| 471 | | | ack_data->ack_id = pinfo->fd->num; |
| 472 | | | g_hash_table_insert (p_mul_data->ack_data, GUINT_TO_POINTER(dstIP), ack_data); |
| 473 | | | } else { |
| 474 | | | p_mul_data->pdu_id = pinfo->fd->num; |
| 475 | | | p_mul_data->pdu_time = pinfo->fd->abs_ts; |
| 476 | | | p_mul_data->addr_id = addr_id; |
| 477 | | | p_mul_data->addr_time = addr_time; |
| 478 | | | p_mul_data->first_msg_time = pinfo->fd->abs_ts; |
| 479 | | | |
| 480 | | | if (pdu_type == Data_PDU && !missing_pdu) { |
| 481 | | | p_mul_data->prev_pdu_id = prev_id; |
| 482 | | | p_mul_data->prev_pdu_time = prev_time; |
| 483 | | | } |
| 484 | | | |
| 485 | | | g_hash_table_insert (p_mul_id_hash_table, p_mul_key, p_mul_data); |
| 486 | | | } |
| 487 | | | } |
| 488 | | | |
| 489 | | | |
| 490 | | | pkg_data = se_alloc (sizeof (p_mul_seq_val)); |
| 491 | | | *pkg_data = *p_mul_data; |
| 492 | | | if (p_mul_data->ack_data) { |
| 493 | | | |
| 494 | | | pkg_data->ack_data = g_hash_table_new (NULL, NULL); |
| 495 | | | g_hash_table_foreach (p_mul_data->ack_data, (GHFunc) copy_hashtable_data, pkg_data->ack_data); |
| 496 | | | } |
| 497 | | | g_hash_table_insert (pkg_list, GUINT_TO_POINTER(message_id), pkg_data); |
| 498 | | | } else { |
| 499 | | | |
| 500 | | | pkg_data = g_hash_table_lookup (pkg_list, GUINT_TO_POINTER(message_id)); |
| 501 | | | } |
| 502 | | | |
| 503 | | | DISSECTOR_ASSERT (pkg_data);
x /home/sate/Testcases/c/cve/wireshark-1.2.0/epan/proto.h |
| |
117 | #define DISSECTOR_ASSERT(expression) \ |
118 | ((void) ((expression) ? (void)0 : \ |
119 | __DISSECTOR_ASSERT (expression, __FILE__, __LINE__))) |
| |
x /home/sate/Testcases/c/cve/wireshark-1.2.0/epan/proto.h |
| |
138 | #define __DISSECTOR_ASSERT(expression, file, lineno) \ |
139 | (REPORT_DISSECTOR_BUG( \ |
140 | ep_strdup_printf("%s:%u: failed assertion \"%s\"", \ |
141 | file, lineno, __DISSECTOR_ASSERT_STRINGIFY(expression)))) |
| |
x /home/sate/Testcases/c/cve/wireshark-1.2.0/epan/proto.h |
| |
106 | #define REPORT_DISSECTOR_BUG(message) \ |
107 | ((getenv("WIRESHARK_ABORT_ON_DISSECTOR_BUG") != NULL) ? \ |
108 | abort() : \ |
109 | THROW_MESSAGE(DissectorError, message)) |
| |
x /home/sate/Testcases/c/cve/wireshark-1.2.0/epan/exceptions.h |
| |
226 | #define THROW_MESSAGE(x, y) \ |
227 | except_throw(XCEPT_GROUP_WIRESHARK, (x), (y)) |
| |
|
Event 5:
pkg_data evaluates to true.
hide
|
|
| 504 | | | return pkg_data; |
| 505 | | | } |
| |