Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libzypp for openSUSE:Factory checked in at 2021-09-02 23:20:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libzypp (Old) and /work/SRC/openSUSE:Factory/.libzypp.new.1899 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libzypp" Thu Sep 2 23:20:07 2021 rev:447 rq:915238 version:17.28.2 Changes: -------- --- /work/SRC/openSUSE:Factory/libzypp/libzypp.changes 2021-08-26 23:14:34.056260631 +0200 +++ /work/SRC/openSUSE:Factory/.libzypp.new.1899/libzypp.changes 2021-09-02 23:20:12.412545408 +0200 @@ -1,0 +2,7 @@ +Tue Aug 31 10:49:51 CEST 2021 - m...@suse.de + +- Workaround Bug 1189788: Don't allow ZYPP_SINGLE_RPMTRANS=1 on a + not UsrMerged Tumbleweed system. +- version 17.28.2 (22) + +------------------------------------------------------------------- Old: ---- libzypp-17.28.1.tar.bz2 New: ---- libzypp-17.28.2.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libzypp.spec ++++++ --- /var/tmp/diff_new_pack.TAyZUQ/_old 2021-09-02 23:20:13.020546166 +0200 +++ /var/tmp/diff_new_pack.TAyZUQ/_new 2021-09-02 23:20:13.020546166 +0200 @@ -40,11 +40,11 @@ %endif Name: libzypp -Version: 17.28.1 +Version: 17.28.2 Release: 0 +License: GPL-2.0-or-later URL: https://github.com/openSUSE/libzypp Summary: Library for package, patch, pattern and product management -License: GPL-2.0-or-later Group: System/Packages BuildRoot: %{_tmppath}/%{name}-%{version}-build Source: %{name}-%{version}.tar.bz2 @@ -245,8 +245,15 @@ %build mkdir build cd build +%if 0%{?suse_version} > 1500 +# Bug 1189788 - UsrMerge: filesystem package breaks system when upgraded in a single rpm transaction +# While the bug is not fixed, we don't allow ZYPP_SINGLE_RPMTRANS=1 on a not UsrMerged system +export CFLAGS="%{optflags} -DNO_SINGLETRANS_USERMERGE" +export CXXFLAGS="%{optflags} -DNO_SINGLETRANS_USERMERGE" +%else export CFLAGS="%{optflags}" export CXXFLAGS="%{optflags}" +%endif unset EXTRA_CMAKE_OPTIONS cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} \ @@ -344,14 +351,14 @@ echo " solvable_name: $1 match_type: glob -version: $2 +Version: $2 " >> ${LOCKSFILE} ;; 3 ) #TODO version echo " solvable_name: $1 match_type: glob -version: $2 $3 +Version: $2 $3 " >> ${LOCKSFILE} ;; esac ++++++ libzypp-17.28.1.tar.bz2 -> libzypp-17.28.2.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/CMakeLists.txt new/libzypp-17.28.2/CMakeLists.txt --- old/libzypp-17.28.1/CMakeLists.txt 2021-07-12 11:16:20.000000000 +0200 +++ new/libzypp-17.28.2/CMakeLists.txt 2021-08-30 09:01:19.000000000 +0200 @@ -8,7 +8,6 @@ OPTION (ENABLE_BUILD_DOCS "Build documentation by default?" OFF) OPTION (ENABLE_BUILD_TRANS "Build translation files by default?" OFF) OPTION (ENABLE_BUILD_TESTS "Build and run test suite by default?" OFF) -OPTION (ENABLE_USE_THREADS "Enable using threads (NOT being used by threads!)?" OFF) OPTION (ENABLE_ZSTD_COMPRESSION "Build with zstd compression support?" OFF) OPTION (ENABLE_ZCHUNK_COMPRESSION "Build with zchunk compression support?" OFF) # Helps with bug https://bugzilla.gnome.org/show_bug.cgi?id=784550 , Segfault during signal emission when slots are cleared @@ -75,8 +74,14 @@ CHECK_C_COMPILER_FLAG("-Werror=format-security" CC_FORMAT_SECURITY) CHECK_CXX_COMPILER_FLAG("-Werror=format-security" CXX_FORMAT_SECURITY) -SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing -fPIC -g -Wall -Wp,-D_GLIBCXX_ASSERTIONS" ) -SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing -fPIC -g -Wall -Wp,-D_GLIBCXX_ASSERTIONS" ) +SET( CMAKE_THREAD_PREFER_PTHREAD TRUE ) +FIND_PACKAGE( Threads REQUIRED ) +IF ( NOT CMAKE_USE_PTHREADS_INIT ) + MESSAGE( FATAL_ERROR "No pthreads found" ) +ENDIF ( NOT CMAKE_USE_PTHREADS_INIT ) + +SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -fno-strict-aliasing -fPIC -g -Wall -Wp,-D_GLIBCXX_ASSERTIONS" ) +SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -fno-strict-aliasing -fPIC -g -Wall -Wp,-D_GLIBCXX_ASSERTIONS" ) SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden -Woverloaded-virtual -Wnon-virtual-dtor" ) @@ -130,16 +135,6 @@ #################################################################### -IF ( ENABLE_USE_THREADS ) - SET( CMAKE_THREAD_PREFER_PTHREAD TRUE ) - FIND_PACKAGE( Threads REQUIRED ) - IF ( CMAKE_USE_PTHREADS_INIT ) - MESSAGE( STATUS "May use threads." ) - SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -DZYPP_USE_THREADS" ) - SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -DZYPP_USE_THREADS" ) - ENDIF ( CMAKE_USE_PTHREADS_INIT ) -ENDIF ( ENABLE_USE_THREADS ) - INCLUDE(CheckSymbolExists) FIND_PACKAGE(Rpm REQUIRED) IF ( NOT RPM_FOUND) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/VERSION.cmake new/libzypp-17.28.2/VERSION.cmake --- old/libzypp-17.28.1/VERSION.cmake 2021-08-23 08:41:24.000000000 +0200 +++ new/libzypp-17.28.2/VERSION.cmake 2021-08-31 10:51:19.000000000 +0200 @@ -61,8 +61,8 @@ SET(LIBZYPP_MAJOR "17") SET(LIBZYPP_COMPATMINOR "22") SET(LIBZYPP_MINOR "28") -SET(LIBZYPP_PATCH "1") +SET(LIBZYPP_PATCH "2") # -# LAST RELEASED: 17.28.1 (22) +# LAST RELEASED: 17.28.2 (22) # (The number in parenthesis is LIBZYPP_COMPATMINOR) #======= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/libzypp.spec.cmake new/libzypp-17.28.2/libzypp.spec.cmake --- old/libzypp-17.28.1/libzypp.spec.cmake 2021-07-22 11:47:11.000000000 +0200 +++ new/libzypp-17.28.2/libzypp.spec.cmake 2021-08-26 18:56:17.000000000 +0200 @@ -244,8 +244,15 @@ %build mkdir build cd build +%if 0%{?suse_version} > 1500 +# Bug 1189788 - UsrMerge: filesystem package breaks system when upgraded in a single rpm transaction +# While the bug is not fixed, we don't allow ZYPP_SINGLE_RPMTRANS=1 on a not UsrMerged system +export CFLAGS="%{optflags} -DNO_SINGLETRANS_USERMERGE" +export CXXFLAGS="%{optflags} -DNO_SINGLETRANS_USERMERGE" +%else export CFLAGS="%{optflags}" export CXXFLAGS="%{optflags}" +%endif unset EXTRA_CMAKE_OPTIONS cmake -DCMAKE_INSTALL_PREFIX=%{_prefix} \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/package/libzypp.changes new/libzypp-17.28.2/package/libzypp.changes --- old/libzypp-17.28.1/package/libzypp.changes 2021-08-23 08:41:24.000000000 +0200 +++ new/libzypp-17.28.2/package/libzypp.changes 2021-08-31 10:51:19.000000000 +0200 @@ -1,4 +1,11 @@ ------------------------------------------------------------------- +Tue Aug 31 10:49:51 CEST 2021 - m...@suse.de + +- Workaround Bug 1189788: Don't allow ZYPP_SINGLE_RPMTRANS=1 on a + not UsrMerged Tumbleweed system. +- version 17.28.2 (22) + +------------------------------------------------------------------- Mon Aug 23 08:39:15 CEST 2021 - m...@suse.de - Fix crashes in logging code when shutting down (bsc#1189031) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/zypp/CMakeLists.txt new/libzypp-17.28.2/zypp/CMakeLists.txt --- old/libzypp-17.28.1/zypp/CMakeLists.txt 2021-07-26 11:51:28.000000000 +0200 +++ new/libzypp-17.28.2/zypp/CMakeLists.txt 2021-08-26 18:56:18.000000000 +0200 @@ -945,7 +945,6 @@ TARGET_LINK_LIBRARIES(${LIBNAME} zypp-core ) TARGET_LINK_LIBRARIES(${LIBNAME} zypp-protobuf ) - TARGET_LINK_LIBRARIES(${LIBNAME} ${UTIL_LIBRARY} ) TARGET_LINK_LIBRARIES(${LIBNAME} ${RPM_LIBRARY} ) TARGET_LINK_LIBRARIES(${LIBNAME} ${GETTEXT_LIBRARIES} ) @@ -958,6 +957,7 @@ TARGET_LINK_LIBRARIES(${LIBNAME} ${GPGME_PTHREAD_LIBRARIES}) target_link_libraries(${LIBNAME} ${YAML_CPP_LIBRARIES}) target_link_libraries(${LIBNAME} ${PROTOBUF_LITE_LIBRARIES}) + TARGET_LINK_LIBRARIES(${LIBNAME} pthread ) IF (ENABLE_ZSTD_COMPRESSION) TARGET_LINK_LIBRARIES(${LIBNAME} ${ZSTD_LIBRARY}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/zypp/ZYppCommitPolicy.cc new/libzypp-17.28.2/zypp/ZYppCommitPolicy.cc --- old/libzypp-17.28.1/zypp/ZYppCommitPolicy.cc 2021-07-12 11:16:20.000000000 +0200 +++ new/libzypp-17.28.2/zypp/ZYppCommitPolicy.cc 2021-08-26 18:56:18.000000000 +0200 @@ -20,6 +20,10 @@ #include <zypp-core/base/LogControl.h> #include <zypp-core/TriBool.h> +#ifdef NO_SINGLETRANS_USERMERGE +#include <zypp/PathInfo.h> +#include <zypp/ZYppCallbacks.h> +#endif /////////////////////////////////////////////////////////////////// namespace zypp { ///////////////////////////////////////////////////////////////// @@ -27,16 +31,29 @@ bool singleTransInEnv () { - static TriBool singleTrans = indeterminate; - if ( indeterminate(singleTrans) ) { + static bool singleTrans = ([]()->bool{ const char *val = ::getenv("ZYPP_SINGLE_RPMTRANS"); - if ( val && std::string_view( val ) == "1" ) - singleTrans = true; - else - singleTrans = false; - } - // for some reason some compilers do not accept the implicit conversion to bool here. - return bool( singleTrans ); +#ifdef NO_SINGLETRANS_USERMERGE + // Bug 1189788 - UsrMerge: filesystem package breaks system when upgraded in a single rpm transaction + // While the bug is not fixed, we don't allow ZYPP_SINGLE_RPMTRANS=1 on a not UsrMerged system. + // I.e. if /lib is a directory and not a symlink. + bool ret = ( val && std::string_view( val ) == "1" ); + if ( ret && PathInfo( "/lib", PathInfo::LSTAT ).isDir() ) { + WAR << "Ignore $ZYPP_SINGLE_RPMTRANS=1: Bug 1189788 - UsrMerge: filesystem package breaks system when upgraded in a single rpm transaction" << std::endl; + JobReport::info( + "[boo#1189788] Tumbleweeds filesystem package seems to be unable to perform the\n" + " UsrMerge reliably in a single transaction. The requested\n" + " $ZYPP_SINGLE_RPMTRANS=1 will therefore be IGNORED because\n" + " the UsrMerge did not yet happen on this system." + , JobReport::UserData( "cmdout", "[boo#1189788]" ) ); + return false; + } + return ret; +#else + return ( val && std::string_view( val ) == "1" ); +#endif + })(); + return singleTrans; } /////////////////////////////////////////////////////////////////// diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/zypp/target/TargetImpl.cc new/libzypp-17.28.2/zypp/target/TargetImpl.cc --- old/libzypp-17.28.1/zypp/target/TargetImpl.cc 2021-08-20 15:11:24.000000000 +0200 +++ new/libzypp-17.28.2/zypp/target/TargetImpl.cc 2021-08-30 09:26:34.000000000 +0200 @@ -85,6 +85,7 @@ extern "C" { #include <solv/repo_rpmdb.h> +#include <solv/chksum.h> } namespace zypp { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/zypp/zyppng/media/medianetwork.cc new/libzypp-17.28.2/zypp/zyppng/media/medianetwork.cc --- old/libzypp-17.28.1/zypp/zyppng/media/medianetwork.cc 2021-07-12 11:16:20.000000000 +0200 +++ new/libzypp-17.28.2/zypp/zyppng/media/medianetwork.cc 2021-08-30 10:31:32.000000000 +0200 @@ -539,6 +539,9 @@ case NetworkRequestError::NotFound: ZYPP_THROW( zypp::media::MediaFileNotFoundException( reqUrl, filename ) ); break; + case NetworkRequestError::ExceededMaxLen: + ZYPP_THROW( zypp::media::MediaFileSizeExceededException( reqUrl, 0 ) ); + break; default: break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/zypp/zyppng/media/network/networkrequestdispatcher.cc new/libzypp-17.28.2/zypp/zyppng/media/network/networkrequestdispatcher.cc --- old/libzypp-17.28.1/zypp/zyppng/media/network/networkrequestdispatcher.cc 2021-07-12 11:16:20.000000000 +0200 +++ new/libzypp-17.28.2/zypp/zyppng/media/network/networkrequestdispatcher.cc 2021-08-30 10:31:32.000000000 +0200 @@ -19,6 +19,7 @@ #include <zypp/base/Logger.h> #include <zypp/base/String.h> +#include <zypp/base/DtorReset.h> using namespace boost; @@ -156,7 +157,17 @@ void NetworkRequestDispatcherPrivate::handleMultiSocketAction(curl_socket_t nativeSocket, int evBitmask) { int running = 0; - CURLMcode rc = curl_multi_socket_action( _multi, nativeSocket, evBitmask, &running ); + + // when inside a curl callback we can not call another multi curl API, + // for now just lock the thing, but we should consider rewriting this + // to post events instead of doing direct calls simply to decouple from + // that limitation + CURLMcode rc = CURLM_OK; + { + zypp::DtorReset lockSet( _locked ); + _locked = true; + rc = curl_multi_socket_action( _multi, nativeSocket, evBitmask, &running ); + } if (rc != 0) { //we can not recover from a error like that, cancel all and stop NetworkRequestError err = NetworkRequestErrorPrivate::fromCurlMError( rc ); @@ -166,6 +177,11 @@ _sigError.emit( *z_func() ); return; } + + // make sure we dequeue pending requests ( in case a call to dequeue was blocked during the API call ) + zypp::OnScopeExit scopeFinally([this](){ + this->dequeuePending(); + }); int msgs_left = 0; CURLMsg *msg = nullptr; @@ -202,6 +218,7 @@ void NetworkRequestDispatcherPrivate::cancelAll( NetworkRequestError result ) { //prevent dequeuePending from filling up the runningDownloads again + zypp::DtorReset lockReset( _locked ); _locked = true; while ( _runningDownloads.size() ) { @@ -212,8 +229,6 @@ std::shared_ptr<NetworkRequest> &req = _pendingDownloads.back(); setFinished(*req, result ); } - - _locked = false; } void NetworkRequestDispatcherPrivate::setFinished( NetworkRequest &req, NetworkRequestError result ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/zypp/zyppng/media/network/private/downloaderstates/rangedownloader_p.cc new/libzypp-17.28.2/zypp/zyppng/media/network/private/downloaderstates/rangedownloader_p.cc --- old/libzypp-17.28.1/zypp/zyppng/media/network/private/downloaderstates/rangedownloader_p.cc 2021-07-12 11:16:20.000000000 +0200 +++ new/libzypp-17.28.2/zypp/zyppng/media/network/private/downloaderstates/rangedownloader_p.cc 2021-08-30 10:31:32.000000000 +0200 @@ -26,6 +26,10 @@ for( const auto &req : _runningRequests ) { dlnowMulti += req->downloadedByteCount(); } + + if ( !assertExpectedFilesize( dlnowMulti ) ) + return; + stateMachine()._sigProgress.emit( *stateMachine().z_func(), _fileSize, dlnowMulti ); } @@ -53,6 +57,9 @@ } _downloadedMultiByteCount += req.downloadedByteCount(); + if ( !assertExpectedFilesize( _downloadedMultiByteCount ) ) { + return; + } MIL_MEDIA << "Request finished "<<std::endl; const auto &rngs = reqLocked->requestedRanges(); @@ -284,6 +291,16 @@ if ( req->_myMirror ) req->_myMirror->startTransfer(); } + + bool RangeDownloaderBaseState::assertExpectedFilesize( off_t currentFilesize ) + { + const off_t expFSize = stateMachine()._spec.expectedFileSize(); + if ( expFSize > 0 && expFSize < currentFilesize ) { + setFailed( NetworkRequestErrorPrivate::customError( NetworkRequestError::ExceededMaxLen ) ); + return false; + } + return true; + } /** * Just initialize the requests ranges from the internal blocklist diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libzypp-17.28.1/zypp/zyppng/media/network/private/downloaderstates/rangedownloader_p.h new/libzypp-17.28.2/zypp/zyppng/media/network/private/downloaderstates/rangedownloader_p.h --- old/libzypp-17.28.1/zypp/zyppng/media/network/private/downloaderstates/rangedownloader_p.h 2021-07-12 11:16:20.000000000 +0200 +++ new/libzypp-17.28.2/zypp/zyppng/media/network/private/downloaderstates/rangedownloader_p.h 2021-08-30 10:31:32.000000000 +0200 @@ -78,6 +78,7 @@ void handleRequestError( std::shared_ptr<Request> req, const zyppng::NetworkRequestError &err ); bool addBlockRanges( std::shared_ptr<Request> req, std::vector<Block> &&blocks ) const; void addNewRequest (std::shared_ptr<Request> req, const bool connectSignals = true ); + bool assertExpectedFilesize ( off_t currentFilesize ); std::vector<Block> getNextBlocks ( const std::string &urlScheme ); std::vector<Block> getNextFailedBlocks( const std::string &urlScheme );