<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/5a7ce2532cd8eb1a23722cd57e7a3bb0dd139f0d">https://github.com/macports/macports-legacy-support/commit/5a7ce2532cd8eb1a23722cd57e7a3bb0dd139f0d</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 5a7ce2532cd8eb1a23722cd57e7a3bb0dd139f0d
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Thu Mar 6 14:27:48 2025 -0800

<span style='display:block; white-space:pre;color:#404040;'>    test_packet: Remove forgiveness for bad timestamp format.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Since the mismatched format bug is now corrected by the wrapper, we no
</span><span style='display:block; white-space:pre;color:#404040;'>    longer need to allow it to pass the test.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'>    Fails where expected without the fix.
</span><span style='display:block; white-space:pre;color:#404040;'>    Passes on all platforms with the fix.
</span>---
 test/test_packet.c | 85 ++----------------------------------------------------
 1 file changed, 3 insertions(+), 82 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/test/test_packet.c b/test/test_packet.c
</span><span style='display:block; white-space:pre;color:#808080;'>index a74c627..543736c 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/test/test_packet.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/test/test_packet.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -82,8 +82,8 @@ int __close(int) __asm("_close");
</span> typedef struct timeval timeval_t;
 
 #define BILLION64 1000000000ULL
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> #define MAX_TV_USEC 1000000
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#define MAX_TV_NSEC 1000000000
</span> #define MAX_MACH_TIME (1ULL << 60) /* Arbitrary >36-year uptime limit */
 
 #define TS_TYPES \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -116,85 +116,6 @@ static const int ts_min_darwin[] = {
</span> };
 #undef TS_ONE
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-/*
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Handling for mismatched timestamp formats, copied from ntpsec
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * Since this particular bug is not currently fixed here, we duplicate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * the ntpsec workaround to avoid a test failure.  This is just a verbatim
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- * copy, and handles more issues than we'll see here.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static const union {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   uint8_t c[8];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   uint64_t i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-} endian_test = {{1, 2, 3, 4, 5, 6, 7, 8}};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define ENDIAN_LITTLE 0x0807060504030201ULL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#define IS_LITTLE_ENDIAN (endian_test.i == ENDIAN_LITTLE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-static struct timeval *
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-access_cmsg_timeval(struct cmsghdr *cmsghdr, struct timeval *temp)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   struct timeval_3232 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           uint32_t        tv_sec;  /* Unsigned to get past 2038 */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           int32_t         tv_usec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } *tv3232p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   struct timeval_6432 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           int64_t         tv_sec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           int32_t         tv_usec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } *tv6432p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   #define SIZEOF_PACKED_TIMEVAL6432 (sizeof(int64_t) + sizeof(int32_t))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   struct timeval_6464 {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           int64_t         tv_sec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           uint32_t        tv_usec[2];  /* Unsigned for compares */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } *tv6464p;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   int datalen = CMSG_DATALEN(cmsghdr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   (void) access_cmsg_timeval;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if (datalen == sizeof(struct timeval)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           return (struct timeval *) CMSG_DATA(cmsghdr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   switch (datalen) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case sizeof(struct timeval_3232):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tv3232p = (struct timeval_3232 *) CMSG_DATA(cmsghdr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           temp->tv_sec = tv3232p->tv_sec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           temp->tv_usec = tv3232p->tv_usec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case SIZEOF_PACKED_TIMEVAL6432:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tv6432p = (struct timeval_6432 *) CMSG_DATA(cmsghdr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           temp->tv_sec = tv6432p->tv_sec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           temp->tv_usec = tv6432p->tv_usec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   case sizeof(struct timeval_6464):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           tv6464p = (struct timeval_6464 *) CMSG_DATA(cmsghdr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           temp->tv_sec = tv6464p->tv_sec;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           if (IS_LITTLE_ENDIAN) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   temp->tv_usec = tv6464p->tv_usec[0];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           } else if (tv6464p->tv_usec[0] == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   if (tv6464p->tv_usec[1] < MAX_TV_USEC) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           temp->tv_usec = tv6464p->tv_usec[1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                           temp->tv_usec = tv6464p->tv_usec[0];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           } else if (tv6464p->tv_usec[0] < MAX_TV_USEC) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   temp->tv_usec = tv6464p->tv_usec[0];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           /* FALLTHRU to default (invalid timestamp) */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-           memset(temp, 0, sizeof(struct timeval));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   return temp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> /* Timestamp checks & conversions to uint64 */
 
 static uint64_t
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -208,8 +129,7 @@ typedef uint64_t ts_func_t(struct cmsghdr *cmsghdr);
</span> static uint64_t
 get_timeval_ts(struct cmsghdr *cmsghdr)
 {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-  timeval_t tvtemp;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-  timeval_t *tvp = access_cmsg_timeval(cmsghdr, &tvtemp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  timeval_t *tvp = (struct timeval *) CMSG_DATA(cmsghdr);
</span> 
   if ((uint64_t) tvp->tv_usec >= MAX_TV_USEC) return 0;
   return timeval2nanos(tvp);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -502,6 +422,7 @@ test_timestamp(const char *name, ts_type_t tstype, int sockopt, int scmtype,
</span>   if (ts_sizes[tstype] && datalen != ts_sizes[tstype]) {
     printf("    %s payload length %d != expected sizeof(%s) = %d\n",
            name, datalen, tsname, ts_sizes[tstype]);
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    ret = 1;
</span>   }
   if (hdrlen > (int) sizeof(*cmsg)) {
     xdatap = (uint32_t *) (cbuf + sizeof(*cmsg));
</pre><pre style='margin:0'>

</pre>