File openssh-CVE-2019-6109-force-progressmeter-update.patch of Package openssh.29886

From e8c5725c41c56e599298c926d8c41915954e8c71 Mon Sep 17 00:00:00 2001
From: Pedro Monreal Gonzalez <pmonrealgonzalez@suse.com>
Date: Wed, 26 Oct 2022 10:00:06 +0200
Subject: [PATCH] openssh-CVE-2019-6109-force-progressmeter-update

commit bdc6c63c80b55bcbaa66b5fde31c1cb1d09a41eb
Author: dtucker@openbsd.org <dtucker@openbsd.org>
Date:   Thu Jan 24 16:52:17 2019 +0000

    upstream: Have progressmeter force an update at the beginning and

    end of each transfer.  Fixes the problem recently introduces where very quick
    transfers do not display the progressmeter at all.  Spotted by naddy@

    OpenBSD-Commit-ID: 68dc46c259e8fdd4f5db3ec2a130f8e4590a7a9a
---
 progressmeter.c | 11 ++++-------
 progressmeter.h |  4 ++--
 scp.c           |  2 +-
 sftp-client.c   |  2 +-
 4 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/progressmeter.c b/progressmeter.c
index da6f8dc5..6e115e2b 100644
--- a/progressmeter.c
+++ b/progressmeter.c
@@ -59,9 +59,6 @@ static void format_rate(char *, int, off_t);
 static void sig_winch(int);
 static void setscreensize(void);
 
-/* updates the progressmeter to reflect the current state of the transfer */
-void refresh_progress_meter(void);
-
 /* signal handler for updating the progress meter */
 static void sig_alarm(int);
 
@@ -120,7 +117,7 @@ format_size(char *buf, int size, off_t bytes)
 }
 
 void
-refresh_progress_meter(void)
+refresh_progress_meter(int force_update)
 {
 	char buf[MAX_WINSIZE + 1];
 	time_t now;
@@ -132,7 +129,7 @@ refresh_progress_meter(void)
 	int hours, minutes, seconds;
 	int file_len;
 
-	if ((!alarm_fired && !win_resized) || !can_output())
+	if ((!force_update && !alarm_fired && !win_resized) || !can_output())
 		return;
 	alarm_fired = 0;
 
@@ -255,7 +252,7 @@ start_progress_meter(const char *f, off_t filesize, off_t *ctr)
 	bytes_per_second = 0;
 
 	setscreensize();
-	refresh_progress_meter();
+	refresh_progress_meter(1);
 
 	signal(SIGALRM, sig_alarm);
 	signal(SIGWINCH, sig_winch);
@@ -272,7 +269,7 @@ stop_progress_meter(void)
 
 	/* Ensure we complete the progress */
 	if (cur_pos != end_pos)
-		refresh_progress_meter();
+		refresh_progress_meter(1);
 
 	atomicio(vwrite, STDOUT_FILENO, "\n", 1);
 }
diff --git a/progressmeter.h b/progressmeter.h
index 8f667806..1703ea75 100644
--- a/progressmeter.h
+++ b/progressmeter.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: progressmeter.h,v 1.4 2019/01/23 08:01:46 dtucker Exp $ */
+/* $OpenBSD: progressmeter.h,v 1.5 2019/01/24 16:52:17 dtucker Exp $ */
 /*
  * Copyright (c) 2002 Nils Nordman.  All rights reserved.
  *
@@ -24,5 +24,5 @@
  */
 
 void	start_progress_meter(const char *, off_t, off_t *);
-void	refresh_progress_meter(void);
+void	refresh_progress_meter(int);
 void	stop_progress_meter(void);
diff --git a/scp.c b/scp.c
index 5b515e1e..dbd499d8 100644
--- a/scp.c
+++ b/scp.c
@@ -556,7 +556,7 @@ scpio(void *_cnt, size_t s)
 	off_t *cnt = (off_t *)_cnt;
 
 	*cnt += s;
-	refresh_progress_meter();
+	refresh_progress_meter(0);
 	if (limit_kbps > 0)
 		bandwidth_limit(&bwlimit, s);
 	return 0;
diff --git a/sftp-client.c b/sftp-client.c
index cb894345..85cf9ef6 100644
--- a/sftp-client.c
+++ b/sftp-client.c
@@ -94,7 +94,7 @@ sftpio(void *_bwlimit, size_t amount)
 {
 	struct bwlimit *bwlimit = (struct bwlimit *)_bwlimit;
 
-	refresh_progress_meter();
+	refresh_progress_meter(0);
 	if (bwlimit != NULL)
 		bandwidth_limit(bwlimit, amount);
 	return 0;
-- 
2.38.0

openSUSE Build Service is sponsored by