Text   |  XML   |  ReML   |   Visible Warnings:

Ignored Return Value  at packet-wcp.c:590

No properties have been set. | edit properties
Jump to warning location ↓ warning details...
Show Events | Options

wcp_uncompress

(/home/sate/Testcases/c/cve/wireshark-1.2.0/epan/dissectors/packet-wcp.c)expand/collapse
Show more  
 473  static tvbuff_t *wcp_uncompress( tvbuff_t *src_tvb, int offset, packet_info *pinfo, proto_tree *tree) {
 474   
 475  /* do the packet data uncompression and load it into the dst buffer */
 476   
 477          proto_tree      *sub_tree;
 478          proto_item      *ti;
 479   
 480          int len=0, i = -1;
 481          int cnt = tvb_reported_length( src_tvb)-1;      /* don't include check byte */
 482   
 483          guint8 *dst, *src, *buf_start, *buf_end,  *tmp, comp_flag_bits = 0;
 484          guint8 src_buf[ MAX_WCP_BUF_LEN];
 485          tvbuff_t *volatile tvb = 0;
 486          wcp_window_t *buf_ptr = 0;
 487          wcp_pdata_t *volatile pdata_ptr;
 488          volatile gboolean bounds_error = FALSE;
 489           
 490          buf_ptr = get_wcp_window_ptr( pinfo);
 491   
 492          buf_start = buf_ptr->buffer;
 493          buf_end = buf_start + MAX_WIN_BUF_LEN;
 494          tmp = buf_ptr->buf_cur;
 495   
 496          if (cnt - offset > MAX_WCP_BUF_LEN) {
 497                  if (tree)
 498                          proto_tree_add_text( tree, src_tvb, offset, -1,
 499                                  "Compressed data exceeds maximum buffer length (%d > %d)",
 500                                  cnt - offset, MAX_WCP_BUF_LEN);
 501                  return NULL;
 502          }
 503   
 504          src = tvb_memcpy(src_tvb, src_buf, offset, cnt - offset);
 505          dst = buf_ptr->buf_cur;
 506   
 507          while( offset++ < cnt){
 508   
 509                  if ( --i >= 0){
 510                          if ( comp_flag_bits & 0x80){    /* if this is a compressed entry */
 511   
 512                                  if ( !pinfo->fd->flags.visited){        /* if first pass */
 513                                          dst = decompressed_entry( src, dst, &len, buf_start, buf_end);
 514                                  }
 515                                  if ((*src & 0xf0) == 0x10){
 516                                          if ( tree) {
 517                                                  ti = proto_tree_add_item( tree, hf_wcp_long_run, src_tvb,
 518                                                           offset-1, 3, 0);
 519                                                  sub_tree = proto_item_add_subtree(ti, ett_wcp_field);
 520                                                  proto_tree_add_uint(sub_tree, hf_wcp_offset, src_tvb,
 521                                                           offset-1, 2, pntohs(src));
 522   
 523                                                  proto_tree_add_item( sub_tree, hf_wcp_long_len, src_tvb,
 524                                                           offset+1, 1, pntohs(src));
 525                                          }
 526                                          src += 3;
 527                                          offset += 2;
 528                                  }else{
 529                                          if ( tree) {
 530                                                  ti = proto_tree_add_item( tree, hf_wcp_short_run, src_tvb,
 531                                                           offset - 1, 2, *src);
 532                                                  sub_tree = proto_item_add_subtree(ti, ett_wcp_field);
 533                                                  proto_tree_add_item( sub_tree, hf_wcp_short_len, src_tvb,
 534                                                           offset-1, 1, *src);
 535                                                  proto_tree_add_uint(sub_tree, hf_wcp_offset, src_tvb,
 536                                                           offset-1, 2, pntohs(src));
 537                                          }
 538                                          src += 2;
 539                                          offset += 1;
 540                                  }
 541                          }else {
 542                                  if ( !pinfo->fd->flags.visited){        /* if first pass */
 543                                          *dst = *src;
 544                                          if ( dst++ == buf_end)
 545                                                  dst = buf_start;
 546                                  }
 547                                  ++src;
 548                                  ++len;
 549   
 550                          }
 551   
 552                          if ( len >MAX_WCP_BUF_LEN){
 553                                  return NULL;
 554                          }
 555   
 556                          comp_flag_bits <<= 1;
 557   
 558                  }else { /* compressed data flag */
 559   
 560                          comp_flag_bits = *src++;
 561                          if (tree)
 562                                  proto_tree_add_uint( tree, hf_wcp_comp_bits,  src_tvb, offset-1, 1,
 563                                          comp_flag_bits);
 564   
 565                          i = 8;
 566                  }
 567          }
 568   
 569          if ( pinfo->fd->flags.visited){ /* if not first pass */
 570                                          /* get uncompressed data */
 571                  pdata_ptr = p_get_proto_data( pinfo->fd, proto_wcp);
 572   
 573                  if ( !pdata_ptr)        /* exit if no data */
 574                          return NULL;
 575                  len = pdata_ptr->len;
 576          } else {
 577   
 578          /* save the new data as per packet data */
 579                  pdata_ptr = se_alloc(sizeof(wcp_pdata_t));
 580                  memcpy( &pdata_ptr->buffer, buf_ptr->buf_cur,  len);
 581                  pdata_ptr->len = len;
 582   
 583                  p_add_proto_data( pinfo->fd, proto_wcp, (void*)pdata_ptr);
 584   
 585                  buf_ptr->buf_cur = dst;
 586          }
 587   
 588   
 589          TRY {
 590                  tvb = tvb_new_child_real_data(src_tvb,  pdata_ptr->buffer, pdata_ptr->len, pdata_ptr->len);
 591          }
 592          CATCH(BoundsError) {
 593                  DISSECTOR_ASSERT_NOT_REACHED();
 594          }
 595          CATCH(ReportedBoundsError) {
 596                  bounds_error = TRUE;
 597          }
 598          ENDTRY;
 599   
 600          if (bounds_error) return NULL;
 601                   
 602          /* Add new data to the data source list */
 603          add_new_data_source( pinfo, tvb, "Uncompressed WCP");
 604          return tvb;
 605   
 606  }
Show more  




Change Warning 5464.35684 : Ignored Return Value

Priority:
State:
Finding:
Owner:
Note: