]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-pgm.c
Refine INSTALL.txt. [skip ci]
[tcpdump] / print-pgm.c
index 7c47b12b06674a084cb867088d7d59c5e824d125..39597e7f57e41bc69a278921d73c7a6b5bfd3756 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "netdissect-stdinc.h"
 
+#define ND_LONGJMP_FROM_TCHECK
 #include "netdissect.h"
 #include "extract.h"
 #include "addrtoname.h"
@@ -174,8 +175,7 @@ pgm_print(netdissect_options *ndo,
                                GET_IPADDR_STRING(ip->ip_src),
                                GET_IPADDR_STRING(ip->ip_dst));
                }
-               nd_print_trunc(ndo);
-               return;
+               nd_trunc_longjmp(ndo);
        }
 
        sport = GET_BE_U_2(pgm->pgm_sport);
@@ -240,7 +240,7 @@ pgm_print(netdissect_options *ndo,
                bp += sizeof(nd_ipv6);
                break;
            default:
-               goto trunc;
+               goto invalid;
                break;
            }
 
@@ -272,19 +272,16 @@ pgm_print(netdissect_options *ndo,
                bp += sizeof(nd_ipv6);
                break;
            default:
-               goto trunc;
+               goto invalid;
                break;
            }
 
-           ND_TCHECK_LEN(bp, sizeof(uint32_t));
            ivl = GET_BE_U_4(bp);
            bp += sizeof(uint32_t);
 
-           ND_TCHECK_LEN(bp, sizeof(uint32_t));
            rnd = GET_BE_U_4(bp);
            bp += sizeof(uint32_t);
 
-           ND_TCHECK_LEN(bp, sizeof(uint32_t));
            mask = GET_BE_U_4(bp);
            bp += sizeof(uint32_t);
 
@@ -309,7 +306,6 @@ pgm_print(netdissect_options *ndo,
            const struct pgm_data *odata;
 
            odata = (const struct pgm_data *)(pgm + 1);
-           ND_TCHECK_SIZE(odata);
            ND_PRINT("ODATA trail %u seq %u",
                         GET_BE_U_4(odata->pgmd_trailseq),
                         GET_BE_U_4(odata->pgmd_seq));
@@ -321,7 +317,6 @@ pgm_print(netdissect_options *ndo,
            const struct pgm_data *rdata;
 
            rdata = (const struct pgm_data *)(pgm + 1);
-           ND_TCHECK_SIZE(rdata);
            ND_PRINT("RDATA trail %u seq %u",
                         GET_BE_U_4(rdata->pgmd_trailseq),
                         GET_BE_U_4(rdata->pgmd_seq));
@@ -355,7 +350,7 @@ pgm_print(netdissect_options *ndo,
                bp += sizeof(nd_ipv6);
                break;
            default:
-               goto trunc;
+               goto invalid;
                break;
            }
 
@@ -376,7 +371,7 @@ pgm_print(netdissect_options *ndo,
                bp += sizeof(nd_ipv6);
                break;
            default:
-               goto trunc;
+               goto invalid;
                break;
            }
 
@@ -600,7 +595,7 @@ pgm_print(netdissect_options *ndo,
                        opts_len -= PGM_OPT_REDIRECT_FIXED_LEN + sizeof(nd_ipv6);
                        break;
                    default:
-                       goto trunc;
+                       goto invalid;
                        break;
                    }
 
@@ -757,7 +752,7 @@ pgm_print(netdissect_options *ndo,
                        opts_len -= PGM_OPT_PGMCC_DATA_FIXED_LEN + sizeof(nd_ipv6);
                        break;
                    default:
-                       goto trunc;
+                       goto invalid;
                        break;
                    }
 
@@ -800,7 +795,7 @@ pgm_print(netdissect_options *ndo,
                        opts_len -= PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN + sizeof(nd_ipv6);
                        break;
                    default:
-                       goto trunc;
+                       goto invalid;
                        break;
                    }
 
@@ -826,7 +821,6 @@ pgm_print(netdissect_options *ndo,
                                     GET_BE_U_2(pgm->pgm_length));
 
        return;
-
-trunc:
-       nd_print_trunc(ndo);
+invalid:
+       nd_print_invalid(ndo);
 }