Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package yast2 for openSUSE:Factory checked in at 2021-07-17 23:36:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2 (Old) and /work/SRC/openSUSE:Factory/.yast2.new.2632 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2" Sat Jul 17 23:36:30 2021 rev:514 rq:906609 version:4.4.16 Changes: -------- --- /work/SRC/openSUSE:Factory/yast2/yast2.changes 2021-07-01 07:05:33.591512040 +0200 +++ /work/SRC/openSUSE:Factory/.yast2.new.2632/yast2.changes 2021-07-17 23:37:01.237793083 +0200 @@ -1,0 +2,13 @@ +Thu Jul 15 11:04:50 UTC 2021 - David Diaz <dgonza...@suse.com> + +- Do not escape "$" in URL paths (bsc#1187581). +- 4.4.16 + +------------------------------------------------------------------- +Wed Jul 14 16:06:50 UTC 2021 - Stefan Hundhammer <shundham...@suse.com> + +- Don't crash with UI exception in Progress.rb if a popup is in the way + (bsc#1187676) +- 4.4.15 + +------------------------------------------------------------------- Old: ---- yast2-4.4.14.tar.bz2 New: ---- yast2-4.4.16.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2.spec ++++++ --- /var/tmp/diff_new_pack.cpkTIL/_old 2021-07-17 23:37:01.769788982 +0200 +++ /var/tmp/diff_new_pack.cpkTIL/_new 2021-07-17 23:37:01.769788982 +0200 @@ -17,7 +17,7 @@ Name: yast2 -Version: 4.4.14 +Version: 4.4.16 Release: 0 Summary: YaST2 Main Package License: GPL-2.0-only ++++++ yast2-4.4.14.tar.bz2 -> yast2-4.4.16.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-4.4.14/library/types/src/modules/URLRecode.rb new/yast2-4.4.16/library/types/src/modules/URLRecode.rb --- old/yast2-4.4.14/library/types/src/modules/URLRecode.rb 2021-06-29 18:19:30.000000000 +0200 +++ new/yast2-4.4.16/library/types/src/modules/URLRecode.rb 2021-07-16 09:14:19.000000000 +0200 @@ -7,7 +7,7 @@ class URLRecodeClass < Module # these will be substituted to a regex character class USERNAME_PASSWORD_FRAGMENT_SAFE_CHARS = "-A-Za-z0-9_.!~*'()".freeze - PATH_SAFE_CHARS = "-A-Za-z0-9_.!~*'()/:".freeze + PATH_SAFE_CHARS = "-A-Za-z0-9_.!~*'()/:$".freeze QUERY_SAFE_CHARS = "-A-Za-z0-9_.!~*'()/:=&".freeze # Escape password, user name and fragment part of URL string diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-4.4.14/library/types/test/url_test.rb new/yast2-4.4.16/library/types/test/url_test.rb --- old/yast2-4.4.14/library/types/test/url_test.rb 2021-06-29 18:19:30.000000000 +0200 +++ new/yast2-4.4.16/library/types/test/url_test.rb 2021-07-16 09:14:19.000000000 +0200 @@ -236,7 +236,7 @@ "path" => "/share$$share/path/on/the/share", "scheme" => "smb", "user" => "username")).to eq( - "smb://username:pas...@myserver.com/share%24%24share/path/on/the/share?workgroup=workgroup" + "smb://username:pas...@myserver.com/share$$share/path/on/the/share?workgroup=workgroup" ) end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-4.4.14/library/types/test/urlrecode_test.rb new/yast2-4.4.16/library/types/test/urlrecode_test.rb --- old/yast2-4.4.14/library/types/test/urlrecode_test.rb 2021-06-29 18:19:30.000000000 +0200 +++ new/yast2-4.4.16/library/types/test/urlrecode_test.rb 2021-07-16 09:14:19.000000000 +0200 @@ -8,7 +8,7 @@ subject { Yast::URLRecode } describe "#EscapePath" do - let(:test_path) { "/@\#$%^&/dir/\u010D\u00FD\u011B\u0161\u010D\u00FD\u00E1/file" } + let(:test_path) { "/@\#%^&/dir/\u010D\u00FD\u011B\u0161\u010D\u00FD\u00E1/file" } it "returns nil if the url is nil too" do expect(subject.EscapePath(nil)).to eq(nil) end @@ -19,7 +19,7 @@ it "returns escaped path" do expect(subject.EscapePath(test_path)).to eq( - "/%40%23%24%25%5e%26/dir/%c4%8d%c3%bd%c4%9b%c5%a1%c4%8d%c3%bd%c3%a1/file" + "/%40%23%25%5e%26/dir/%c4%8d%c3%bd%c4%9b%c5%a1%c4%8d%c3%bd%c3%a1/file" ) end @@ -28,10 +28,15 @@ end it "returns escaped special characters" do - expect(subject.EscapePath(" !@\#$%^&*()/?+=:")).to eq( - "%20!%40%23%24%25%5e%26*()/%3f%2b%3d:" + expect(subject.EscapePath(" !@\#%^&*()/?+=:")).to eq( + "%20!%40%23%25%5e%26*()/%3f%2b%3d:" ) end + + it "does not escape '$'" do + expect(subject.EscapePath("path/to/%SUSE%/$releasever")) + .to eq("path/to/%25SUSE%25/$releasever") + end end describe "#EscapePassword" do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-4.4.14/library/wizard/src/modules/Progress.rb new/yast2-4.4.16/library/wizard/src/modules/Progress.rb --- old/yast2-4.4.14/library/wizard/src/modules/Progress.rb 2021-06-29 18:19:30.000000000 +0200 +++ new/yast2-4.4.16/library/wizard/src/modules/Progress.rb 2021-07-16 09:14:19.000000000 +0200 @@ -20,11 +20,6 @@ # # *************************************************************************** # File: modules/Progress.ycp -# Module: Progress -# Summary: Progress bar -# Authors: Petr Blahos <pbla...@suse.cz> -# -# $Id$ # # Functions for progress bar.<br> # <pre> @@ -88,6 +83,8 @@ module Yast class ProgressClass < Module + include Yast::Logger + def main Yast.import "UI" @@ -143,8 +140,7 @@ # Check if any progress bar exists. If it does not, we're not running # (querying progress counter is not enough, a module ran previously # might have failed to reset the counter properly) - Ops.greater_than(@progress_running, 0) && - UI.WidgetExists(:progress_replace_point) == true + @progress_running > 0 && UI.WidgetExists(:progress_replace_point) end # push the current progress into the stack @@ -226,7 +222,7 @@ pb_value = Ops.add(pb_value.nil? ? 0 : pb_value, 1) # refresh the progress widget, add one step for the embedded progress - UI.ReplaceWidget( + try_replace_widget( Id(:progress_replace_point), ProgressBar( Id(:pb), @@ -384,14 +380,13 @@ end # set the maximum value of the progress bar - UI.ReplaceWidget( + try_replace_widget( Id(:progress_replace_point), ProgressBar(Id(:pb), progress_title, @progress_max, @progress_val) ) Builtins.y2debug("New progress: %1/%2", @progress_val, @progress_max) - # increase the reference counter - @progress_running = Ops.add(@progress_running, 1) + @progress_running += 1 return else @progress_max = @steps @@ -451,7 +446,7 @@ end # patch from Michal Srb https://bugzilla.novell.com/show_bug.cgi?id=406890#c7 - UI.ReplaceWidget(Id(:contents), bar) if !Mode.test && UI.WidgetExists(Id(:contents)) + try_replace_widget(Id(:contents), bar) unless Mode.test if !UI.WizardCommand(term(:SetDialogHeading, window_title)) UI.ChangeWidget(Id(:title), :Value, window_title) @@ -461,7 +456,7 @@ Wizard.DisableBackButton Wizard.DisableNextButton - @progress_running = Ops.add(@progress_running, 1) + @progress_running += 1 nil end @@ -547,7 +542,7 @@ end Builtins.y2debug("widget: %1", widget) - UI.ReplaceWidget(Id(:subprogress_replace_point), widget) + try_replace_widget(Id(:subprogress_replace_point), widget) # remember the max. value @last_subprogress_max = max_value @@ -785,7 +780,7 @@ return if !@visible || Mode.commandline # decrease the reference counter - @progress_running = Ops.subtract(@progress_running, 1) + @progress_running -= 1 # set the previous state if Ops.greater_than(StackSize(), 0) @@ -898,6 +893,18 @@ nil end + # Try replacing a ReplacePoint widget's content with new content, but only + # if the ReplacePoint actually exists: It might be hidden by another dialog + # that was opened on top of the current one (bsc#1187676). + def try_replace_widget(widget_id, new_content) + if UI.WidgetExists(widget_id) + UI.ReplaceWidget(widget_id, new_content) + else + log.warn("No widget with ID #{widget_id} in the current dialog") + UI.DumpWidgetTree + end + end + publish function: :IsRunning, type: "boolean ()" publish function: :CurrentSubprogressType, type: "symbol ()" publish function: :SubprogressTitle, type: "void (string)" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-4.4.14/library/wizard/test/manual/progress_demo.rb new/yast2-4.4.16/library/wizard/test/manual/progress_demo.rb --- old/yast2-4.4.14/library/wizard/test/manual/progress_demo.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-4.4.16/library/wizard/test/manual/progress_demo.rb 2021-07-16 09:14:19.000000000 +0200 @@ -0,0 +1,264 @@ +#!/usr/bin/env ruby + +# Copyright (c) [2021] SUSE LLC +# +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of version 2 of the GNU General Public License as published +# by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, contact SUSE LLC. +# +# To contact SUSE LLC about this file by physical or electronic mail, you may +# find current contact information at www.suse.com. + +#--------------------------------------------------------------------------- +# +# Manual demo and testing client for the Progress.rb module +# +# Start with +# +# yast2 ./progress_demo +# +# and click though the application. Use the "Next Step", "Next Stage", "Next +# Stage Step" buttons to trigger the progress update methods of the Progress +# module directly. +# +# Use "Open Popup" to open a popup like in the libzypp callbacks (you can open +# several of them) and "Close Popup" to close the toplevel layer of popups +# again. Use the "Next XZ" buttons from there to check what happens if the +# progress is updated while one of those popups is open: It shouldn't crash +# with a UI error (bsc#1187676), though it may leave the progress somewhat +# disturbed visually afterwards. +# +# Implementation details: This uses a normal UI dialog, not, as the Progress +# module expects, a wizard dialog: It would completely exchange the content of +# the wizard dialog, removing the buttons that we added for the purpose of this +# test, which would make the test unusable. + +require "yast" + +module Yast + class ProgressDemo < Client + include Yast::Logger + + attr_accessor :progress_type + + def initialize + Yast.import "UI" + Yast.import "Progress" + + @popup_count = 0 + @progress_type = :simple + end + + def run + UI.OpenDialog(content) + add_progress + handle_events + UI.CloseDialog + end + + def content + MinSize( + Id(:main_dialog), + 80, 20, + MarginBox( + 2, 0.45, + HBox( + HVCenter( + # This emulates the inner part of a wizard dialog + # which we can't use to avoid our buttons being removed + ReplacePoint(Id(:contents), Empty()) + ), + HSpacing(3), + main_buttons + ) + ) + ) + end + + def add_progress + case @progress_type + when :simple + simple_progress + when :complex, nil + complex_progress + end + end + + def simple_progress + window_title = "" # unused + progress_title = "Some Progress..." + progress_len = 7 + help_text = "" + + Progress.Simple( + window_title, + progress_title, + progress_len, + help_text + ) + end + + def complex_progress + window_title = "" # unused + progress_title = "Complex Progress..." + help_text = "" + + stages = ["Stage 1", "Stage 2", "Stage 3", "Stage 4"] + titles = ["Title 1", "Title 2", "Title 3", "Title 4"] + progress_len = 3 * stages.size + + Progress.New( + window_title, + progress_title, + progress_len, + stages, + titles, + help_text + ) + Progress.NextStage + end + + def main_buttons + HSquash( + VBox( + VStretch(), + *common_buttons, + VStretch(), + PushButton(Id(:quit), Opt(:hstretch), "&Quit") + ) + ) + end + + def common_buttons + # Opt(:hstretch) makes all buttons the same width if put in a vertical + # column (as used in the main dialog). It has no effect if they are put + # in a horizontal row (as used in the popup dialog). + opt = Opt(:hstretch) + + [ + PushButton(Id(:next_step), opt, "&Next Step"), + PushButton(Id(:next_stage), opt, "Next &Stage"), + PushButton(Id(:next_stage_step), opt, "Next Stage St&ep"), + PushButton(Id(:open_popup), opt, "&Open Popup") + ] + end + + def open_popup + @popup_count += 1 + UI.OpenDialog(popup_content) + end + + def popup? + UI.WidgetExists(:popup_dialog) + end + + def close_popup + if popup? + UI.CloseDialog + @popup_count -= 1 + else + log.warn("No popup dialog to close") + end + end + + def popup_content + MarginBox( + Id(:popup_dialog), + 2, 0.45, + VBox( + HVCenter( + Label("Popup dialog ##{@popup_count} that gets in the way") + ), + popup_buttons + ) + ) + end + + def popup_buttons + HBox( + HStretch(), + *common_buttons, + PushButton(Id(:close_popup), "&Close Popup"), + HStretch() + ) + end + + # Event handler for the main dialog as well as for any open popups + # + # rubocop:disable Style/GuardClause + def handle_events + loop do + input = UI.UserInput + log.info("Input: \"#{input}\"") + + case input + when :quit + break # leave event loop + when :open_popup + open_popup + when :close_popup + close_popup + when :cancel # :cancel is WM_CLOSE + if popup? + close_popup + else + break # leave event loop + end + when :next_step + Progress.NextStep + when :next_stage + Progress.NextStage + when :next_stage_step + Progress.NextStageStep(1) + end + + input + end + end + # rubocop:enable Style/GuardClause + + # Open a dialog to ask the user which progress type to use and set the + # internal @progress_type member variable accordingly. + def select_progress_type + UI.OpenDialog( + MarginBox( + 1, 0.45, + MinWidth( + 20, + VBox( + SelectionBox( + Id(:progress_type), + "Progress &Type", + [ + Item(Id(:simple), "Simple", true), + Item(Id(:complex), "Complex") + ] + ), + Right(PushButton("C&ontinue")) + ) + ) + ) + ) + UI.UserInput + # Query the widget as long as the dialog is still open + @progress_type = UI.QueryWidget(Id(:progress_type), :Value) + UI.CloseDialog + @progress_type + end + end +end + +client = Yast::ProgressDemo.new +# Comment the next line out to avoid the initial question +client.select_progress_type +client.run diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-4.4.14/package/yast2.changes new/yast2-4.4.16/package/yast2.changes --- old/yast2-4.4.14/package/yast2.changes 2021-06-29 18:19:30.000000000 +0200 +++ new/yast2-4.4.16/package/yast2.changes 2021-07-16 09:14:19.000000000 +0200 @@ -1,4 +1,17 @@ ------------------------------------------------------------------- +Thu Jul 15 11:04:50 UTC 2021 - David Diaz <dgonza...@suse.com> + +- Do not escape "$" in URL paths (bsc#1187581). +- 4.4.16 + +------------------------------------------------------------------- +Wed Jul 14 16:06:50 UTC 2021 - Stefan Hundhammer <shundham...@suse.com> + +- Don't crash with UI exception in Progress.rb if a popup is in the way + (bsc#1187676) +- 4.4.15 + +------------------------------------------------------------------- Wed Jun 23 13:24:04 UTC 2021 - Ancor Gonzalez Sosa <an...@suse.com> - Y2Issues::Issue: renamed severity "fatal" to "error", to be more diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-4.4.14/package/yast2.spec new/yast2-4.4.16/package/yast2.spec --- old/yast2-4.4.14/package/yast2.spec 2021-06-29 18:19:30.000000000 +0200 +++ new/yast2-4.4.16/package/yast2.spec 2021-07-16 09:14:19.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2 -Version: 4.4.14 +Version: 4.4.16 Release: 0 Summary: YaST2 Main Package License: GPL-2.0-only