]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: don't try to use timespeccmp(3) directly as a qsort(3)
authordjm@openbsd.org <djm@openbsd.org>
Fri, 8 Jan 2021 02:44:14 +0000 (02:44 +0000)
committerDamien Miller <djm@mindrot.org>
Fri, 8 Jan 2021 02:50:46 +0000 (13:50 +1100)
comparison function - it returns 0/1 and not the -1/0/1 that qsort expectes.

fixes sftp "ls -ltr" under some circumstances.

Based on patch by Masahiro Matsuya via bz3248.

OpenBSD-Commit-ID: 65b5e9f18bb0d10573868c3516de6e5170adb163

sftp.c

diff --git a/sftp.c b/sftp.c
index 248d452100d8316723215dd7655c264beef9ea9b..fb3c08d1958e0441979b2032d997e27414f1dc24 100644 (file)
--- a/sftp.c
+++ b/sftp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp.c,v 1.205 2020/12/04 02:41:10 djm Exp $ */
+/* $OpenBSD: sftp.c,v 1.206 2021/01/08 02:44:14 djm Exp $ */
 /*
  * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
  *
@@ -891,7 +891,10 @@ sglob_comp(const void *aa, const void *bb)
                return (rmul * strcmp(ap, bp));
        else if (sort_flag & LS_TIME_SORT) {
 #if defined(HAVE_STRUCT_STAT_ST_MTIM)
-               return (rmul * timespeccmp(&as->st_mtim, &bs->st_mtim, <));
+               if (timespeccmp(&as->st_mtim, &bs->st_mtim, ==))
+                       return 0;
+               return timespeccmp(&as->st_mtim, &bs->st_mtim, <) ?
+                   rmul : -rmul;
 #elif defined(HAVE_STRUCT_STAT_ST_MTIME)
                return (rmul * NCMP(as->st_mtime, bs->st_mtime));
 #else