Commit 19fe0bd6 authored by garciay's avatar garciay
Browse files

Bug fixed in certificate specifying a validity restriction region decoding.

parent 9b4b142a
Loading
Loading
Loading
Loading
+50 −18
Original line number Diff line number Diff line
@@ -1344,7 +1344,6 @@ static int tree_gn_cert(tvbuff_t *tvb, proto_tree *ext_tree, int offset)
	    validr_len -= 1;
	    
	    switch(geor_type) {
	      int poly_list_len;
	      int local_region;
	      int local_region_size;
	      
@@ -1362,25 +1361,41 @@ static int tree_gn_cert(tvbuff_t *tvb, proto_tree *ext_tree, int offset)
	      hdrlen -= 2;
	      validr_len -= 2;
	      break;
	    case 2:
	    case 2: {
	      // rectangle
 	        int rectangle_len;
	        int rectangle_len_size;
         
            rectangle_len_size = dissect_var_val(tvb, shfc_tree, offset, &rectangle_len);
            proto_tree_add_uint(shfc_tree, hf_gn_st_opaquelen, tvb, offset, rectangle_len_size, rectangle_len);
            offset += rectangle_len_size;
            hdrlen -= rectangle_len_size;
            validr_len -= rectangle_len_size;
            
            while (rectangle_len > 0) {              
	      off_size = tree_gn_2dpos(tvb, shfc_tree, offset);
	      offset += off_size;
	      hdrlen -= off_size;
	      validr_len -= off_size;
              rectangle_len -= off_size;
	      off_size = tree_gn_2dpos(tvb, shfc_tree, offset);
	      offset += off_size;
	      hdrlen -= off_size;
	      validr_len -= off_size;
              rectangle_len -= off_size;
            } // End of 'while' statement
          }
	      break;
	    case 3:
	    case 3: {
	      // polygon
	      // Get list size
	      dissect_var_val(tvb, shfc_tree, offset, &poly_list_len);
	      proto_tree_add_uint(shfc_tree, hf_gn_st_opaquelen, tvb, offset, 1, poly_list_len);     
	      offset += 1;
	      hdrlen -= 1;
	      validr_len -= 1 + poly_list_len;
 	        int poly_list_len;
	        int poly_list_len_size;
         
            poly_list_len_size = dissect_var_val(tvb, shfc_tree, offset, &poly_list_len);
            proto_tree_add_uint(shfc_tree, hf_gn_st_opaquelen, tvb, offset, poly_list_len_size, poly_list_len);
            offset += poly_list_len_size;
            hdrlen -= poly_list_len_size;
            validr_len -= poly_list_len_size;
	      
	      // Loop through Polygons values
	      while (poly_list_len > 0) {
@@ -1389,6 +1404,7 @@ static int tree_gn_cert(tvbuff_t *tvb, proto_tree *ext_tree, int offset)
		hdrlen -= off_size;
		poly_list_len -= off_size;
	      }
          }
	      break;
	    case 4:
	      // id
@@ -2244,7 +2260,6 @@ dissect_secured_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
	      validr_len -= 1;
	    
	      switch(geor_type) {
		int poly_list_len;
		int local_region;
		int local_region_size;
	      
@@ -2262,25 +2277,41 @@ dissect_secured_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
		hdrlen -= 2;
		validr_len -= 2;
		break;
	      case 2:
	      case 2: {
		// rectangle
 	        int rectangle_len;
	        int rectangle_len_size;
         
            rectangle_len_size = dissect_var_val(tvb, shfc_tree, offset, &rectangle_len);
            proto_tree_add_uint(shfc_tree, hf_gn_st_opaquelen, tvb, offset, rectangle_len_size, rectangle_len);
            offset += rectangle_len_size;
            hdrlen -= rectangle_len_size;
            validr_len -= rectangle_len_size;
            
            while (rectangle_len > 0) {              
		off_size = tree_gn_2dpos(tvb, shfc_tree, offset);
		offset += off_size;
		hdrlen -= off_size;
		validr_len -= off_size;
              rectangle_len -= off_size;
		off_size = tree_gn_2dpos(tvb, shfc_tree, offset);
		offset += off_size;
		hdrlen -= off_size;
		validr_len -= off_size;
              rectangle_len -= off_size;
            } // End of 'while' statement
          }
		break;
	      case 3:
	      case 3: {
		// polygon
		// Get list size
		dissect_var_val(tvb, shfc_tree, offset, &poly_list_len);
		proto_tree_add_uint(shfc_tree, hf_gn_st_opaquelen, tvb, offset, 1, poly_list_len);     
		offset += 1;
		hdrlen -= 1;
		validr_len -= 1 + poly_list_len;
 	        int poly_list_len;
	        int poly_list_len_size;
         
            poly_list_len_size = dissect_var_val(tvb, shfc_tree, offset, &poly_list_len);
            proto_tree_add_uint(shfc_tree, hf_gn_st_opaquelen, tvb, offset, poly_list_len_size, poly_list_len);
            offset += poly_list_len_size;
            hdrlen -= poly_list_len_size;
            validr_len -= poly_list_len_size;
	      
		// Loop through Polygons values
		while (poly_list_len > 0) {
@@ -2289,6 +2320,7 @@ dissect_secured_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
		  hdrlen -= off_size;
		  poly_list_len -= off_size;
		}
          }
		break;
	      case 4:
		// id