Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package upower for openSUSE:Factory checked in at 2026-07-06 12:28:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/upower (Old) and /work/SRC/openSUSE:Factory/.upower.new.1982 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "upower" Mon Jul 6 12:28:14 2026 rev:99 rq:1363689 version:1.91.3 Changes: -------- --- /work/SRC/openSUSE:Factory/upower/upower.changes 2026-06-25 10:51:44.830036467 +0200 +++ /work/SRC/openSUSE:Factory/.upower.new.1982/upower.changes 2026-07-06 12:28:52.632196457 +0200 @@ -1,0 +2,14 @@ +Fri Jul 3 11:12:09 UTC 2026 - Bjørn Lie <[email protected]> + +- Update to version 1.91.3: + + Feature: up-device-battery: Prefer "Standard" over "Fast" + charging + + Fix: Resolve potential leaks + + Fix: Potential out-of-bound access + + Fix: Improve access control + + Fix: Remove unused codes + + Fix: Fix for Asus Battery Charge Threshold Detection +- Drop 25303ba52771ee514b70fb1a5318a8313889ac31.patch: Added + upstream. + +------------------------------------------------------------------- Old: ---- 25303ba52771ee514b70fb1a5318a8313889ac31.patch upower-1.91.2.obscpio New: ---- upower-1.91.3.obscpio ----------(Old B)---------- Old: + Fix: Fix for Asus Battery Charge Threshold Detection - Drop 25303ba52771ee514b70fb1a5318a8313889ac31.patch: Added upstream. ----------(Old E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ upower.spec ++++++ --- /var/tmp/diff_new_pack.4wJdfG/_old 2026-07-06 12:28:53.376222270 +0200 +++ /var/tmp/diff_new_pack.4wJdfG/_new 2026-07-06 12:28:53.380222408 +0200 @@ -28,7 +28,7 @@ %define idevice disabled %endif Name: upower -Version: 1.91.2 +Version: 1.91.3 Release: 0 Summary: Power Device Enumeration Framework License: GPL-2.0-or-later @@ -39,11 +39,10 @@ Source1: upower.rpmlintrc # PATCH-FIX-OPENSUSE: Skip installation of test-only dependencies Patch1: skip-tests-install.patch -# PATCH-FIX-UPSTREAM 25303ba52771ee514b70fb1a5318a8313889ac31.patch -- up-device-battery: Prefer "Standard" over "Fast" charging -Patch2: https://gitlab.freedesktop.org/upower/upower/-/commit/25303ba52771ee514b70fb1a5318a8313889ac31.patch # PATCH-FIX-OPENSUSE: No need on SUSE to grant root user addtional polkit rights, bsc#1265867 # This is a revert of mainline commit d75f2dbee4df2bc20df840 Patch3: policy-org.freedesktop.upower.rules-grant-permission-for-skipping-the-inhibitor.patch + BuildRequires: gobject-introspection-devel >= 0.9.9 BuildRequires: gtk-doc >= 1.11 BuildRequires: intltool ++++++ _service ++++++ --- /var/tmp/diff_new_pack.4wJdfG/_old 2026-07-06 12:28:53.408223380 +0200 +++ /var/tmp/diff_new_pack.4wJdfG/_new 2026-07-06 12:28:53.412223518 +0200 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://gitlab.freedesktop.org/upower/upower.git</param> - <param name="revision">v1.91.2</param> + <param name="revision">v1.91.3</param> <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> <param name="versionrewrite-pattern">(v)?([^+]+)(\+0)?(\+[1-9][0-9]*)?</param> <param name="versionrewrite-replacement">\2\4</param> ++++++ upower-1.91.2.obscpio -> upower-1.91.3.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/.ci/meson-build.sh new/upower-1.91.3/.ci/meson-build.sh --- old/upower-1.91.2/.ci/meson-build.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/upower-1.91.3/.ci/meson-build.sh 2026-07-02 09:39:04.000000000 +0200 @@ -0,0 +1,145 @@ +#!/usr/bin/env bash +# +# This script is sourced from here: +# https://gitlab.freedesktop.org/whot/meson-helper +# +# SPDX-License-Identifier: MIT +# +# Usage: +# meson-build.sh +# [-C directory] ... change to directory before doing anything +# [--skip-build] ... skip the compilation +# [--skip-test|--run-test] ... skip or explicitly run meson test +# [--skip-dist|--run-dist] ... skip or explicitly run meson dist +# [--skip-install|--run-install] ... skip or explicitly run meson install +# +# +# Environment variables: +# If the .meson_environment file exists in $PWD, it is sourced at the start of the script. +# This file is sourced before the -C directory option takes effect. +# +# MESON_BUILDDIR +# MESON_ARGS, MESON_EXTRA_ARGS: +# Args passed to meson setup. The MESON_EXTRA_ARGS exist to make it easier for +# callers to have a default set of arguments and a variable set of arguments. +# MESON_TEST_ARGS, MESON_DIST_ARGS, MESON_INSTALL_ARGS: +# Args passed directly to the respective meson command. If these args are set it implies +# --run-$cmd. Use --skip-$cmd to skip. +# NINJA_ARGS - args passed to ninja via meson compile + +set -x +if [[ -f .meson_environment ]]; then + . .meson_environment +fi + +# If test args are set, we assume we want to run the tests +MESON_RUN_TEST="$MESON_TEST_ARGS" +MESON_RUN_INSTALL="$MESON_INSTALL_ARGS" +MESON_RUN_DIST="$MESON_DIST_ARGS" + +while [[ $# -gt 0 ]]; do + case $1 in + -C) + directory=$2 + shift 2 + pushd "$directory" || exit 1 + ;; + --skip-setup) + shift + MESON_SKIP_SETUP="1" + ;; + --skip-build) + shift + MESON_SKIP_BUILD="1" + ;; + --skip-test) + shift + MESON_RUN_TEST="" + ;; + --run-test) + shift + MESON_RUN_TEST="1" + ;; + --skip-dist) + shift + MESON_RUN_DIST="" + ;; + --run-dist) + shift + MESON_RUN_DIST="1" + ;; + --skip-install) + shift + MESON_RUN_INSTALL="" + ;; + --run-install) + shift + MESON_RUN_INSTALL="1" + ;; + *) + echo "Unknow commandline argument $1" + exit 1 + ;; + esac +done + +if [[ -z "$MESON_BUILDDIR" ]]; then + echo "\$MESON_BUILDDIR undefined." + exit 1 +fi + +# emulate a few gitlab variables to make it easier to +# run and debug locally. +if [[ -z "$CI_JOB_ID" ]] || [[ -z "$CI_JOB_NAME" ]]; then + echo "Missing \$CI_JOB_ID or \$CI_JOB_NAME". + CI_PROJECT_NAME=$(basename "$PWD") + CI_JOB_ID=$(date +%s) + CI_JOB_NAME="$CI_PROJECT_NAME-job-local" + echo "Simulating gitlab environment: " + echo " CI_JOB_ID=$CI_JOB_ID" + echo " CI_JOB_NAME=$CI_JOB_NAME" +fi + +if [[ -n "$FDO_CI_CONCURRENT" ]]; then + jobcount="-j$FDO_CI_CONCURRENT" + export MESON_TESTTHREADS="$FDO_CI_CONCURRENT" +fi + +if [[ -n "$MESON_EXTRA_ARGS" ]]; then + MESON_ARGS="$MESON_ARGS $MESON_EXTRA_ARGS" +fi + +echo "*************************************************" +echo "builddir: $MESON_BUILDDIR" +echo "meson args: $MESON_ARGS" +echo "ninja args: $NINJA_ARGS" +echo "meson test args: $MESON_TEST_ARGS" +echo "job count: ${jobcount-0}" +echo "*************************************************" + +set -e + +if [[ -z "$MESON_SKIP_SETUP" ]]; then + rm -rf "$MESON_BUILDDIR" + meson setup "$MESON_BUILDDIR" $MESON_ARGS +fi +meson configure --no-pager "$MESON_BUILDDIR" + +if [[ -z "$MESON_SKIP_BUILD" ]]; then + if [[ -n "$NINJA_ARGS" ]]; then + ninja_args="--ninja-args $NINJA_ARGS" + fi + meson compile -v -C "$MESON_BUILDDIR" $jobcount $ninja_args +fi + +if [[ -n "$MESON_RUN_TEST" ]]; then + meson test -C "$MESON_BUILDDIR" --print-errorlogs $MESON_TEST_ARGS +fi + +if [[ -n "$MESON_RUN_INSTALL" ]]; then + meson install --no-rebuild -C "$MESON_BUILDDIR" $MESON_INSTALL_ARGS +fi + +if [[ -n "$MESON_RUN_DIST" ]]; then + meson dist -C "$MESON_BUILDDIR" $MESON_DIST_ARGS +fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/.gitlab-ci.yml new/upower-1.91.3/.gitlab-ci.yml --- old/upower-1.91.2/.gitlab-ci.yml 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/.gitlab-ci.yml 2026-07-02 09:39:04.000000000 +0200 @@ -1,17 +1,19 @@ include: - project: 'freedesktop/ci-templates' - ref: master - file: '/templates/fedora.yml' - - project: 'freedesktop/ci-templates' - ref: master - file: '/templates/debian.yml' + ref: 799270f0e582ec6bbf460680c9a4f8f0d2ce7517 + file: + - '/templates/fedora.yml' + - '/templates/debian.yml' + - '/templates/ci-fairy.yml' variables: - FDO_DISTRIBUTION_TAG: latest - FDO_DISTRIBUTION_VERSION: rawhide + FEDORA_VERSION: 44 + DEBIAN_VERSION: trixie + # Opaque tag without meaning. Change whenever we want our images to be rebuilt + FDO_DISTRIBUTION_TAG: "2026-05-28.7" FDO_UPSTREAM_REPO: "upower/$CI_PROJECT_NAME" - FEDORA_IMAGE: "$CI_REGISTRY/upower/$CI_PROJECT_NAME/fedora/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG" - DEPENDENCIES: + FDO_DISTRIBUTION_EXEC: curl https://gitlab.freedesktop.org/hadess/check-abi/-/raw/main/contrib/check-abi-fedora.sh | bash + FEDORA_DEPENDENCIES: gtk-doc meson gettext-devel @@ -35,118 +37,205 @@ python3-packaging git clang - LAST_ABI_BREAK: "9058d45685d1c7c08d52fb64c393fed9eeed542b" + glibc-langpack-fr + umockdev-devel + # Needed for libgudev from git and for pre-commit + FEDORA_EXTRA_DEPENDENCIES: + git + glibc-langpack-fr + umockdev-devel + libatomic + pre-commit + DEBIAN_DEPENDENCIES: + autoconf + automake + autopoint + autotools-dev + binutils + binutils-common + binutils-x86-64-linux-gnu + bsdextrautils + build-essential + bzip2 + ca-certificates + cpp + cpp-14 + cpp-14-x86-64-linux-gnu + cpp-x86-64-linux-gnu + curl + debhelper + git + g++ + g++-14 + g++-14-x86-64-linux-gnu + g++-x86-64-linux-gnu + gcc + gcc-14 + gcc-14-x86-64-linux-gnu + gcc-x86-64-linux-gnu + libgirepository-1.0-dev + libimobiledevice-dev + m4 + make + meson + systemd-dev + gobject-introspection + python3-dbus + python3-packaging + python3-dbusmock + gir1.2-upowerglib-1.0 + libpolkit-gobject-1-dev + xsltproc + gtk-doc-tools + # Needed for libgudev from git + DEBIAN_EXTRA_DEPENDENCIES: + git + umockdev + libgudev-1.0-dev + libumockdev-dev + libumockdev0 + libsystemd-dev + systemd + MESON_BUILDDIR: 'build' + LAST_ABI_BREAK: '9058d45685d1c7c08d52fb64c393fed9eeed542b' workflow: rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS + when: never - if: $CI_PIPELINE_SOURCE == 'push' - if: $CI_PIPELINE_SOURCE == 'schedule' stages: + - container-prep - pre-commit - check-source - build - test - deploy -image: $FEDORA_IMAGE +.fedora-defaults: + extends: + - .fdo.distribution-image@fedora + variables: + FDO_DISTRIBUTION_VERSION: $FEDORA_VERSION + +.debian-defaults: + extends: + - .fdo.distribution-image@debian + variables: + FDO_DISTRIBUTION_VERSION: $DEBIAN_VERSION + +container_fedora_build: + extends: + - .fedora-defaults + - .fdo.container-build@fedora + stage: container-prep + variables: + GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image + FDO_DISTRIBUTION_PACKAGES: $FEDORA_DEPENDENCIES $FEDORA_EXTRA_DEPENDENCIES + +container_debian_build: + extends: + - .debian-defaults + - .fdo.container-build@debian + stage: container-prep + variables: + GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image + FDO_DISTRIBUTION_PACKAGES: $DEBIAN_DEPENDENCIES $DEBIAN_EXTRA_DEPENDENCIES + +verify_signoff: + extends: + - .fdo.ci-fairy + stage: pre-commit + script: + - ci-fairy -vv check-commits --signed-off-by --junit-xml=results.xml + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + variables: + GIT_DEPTH: 100 + artifacts: + reports: + junit: results.xml pre_commit: + extends: + - .fedora-defaults stage: pre-commit script: - - dnf install -y libatomic - - dnf install -y pre-commit - pre-commit run --all-files + needs: + - container_fedora_build test_nut_hwdb: + extends: + - .fedora-defaults stage: check-source - except: - variables: - - $CI_PIPELINE_SOURCE == "schedule" allow_failure: true script: - curl https://raw.githubusercontent.com/networkupstools/nut/master/scripts/upower/95-upower-hid.hwdb >rules/95-upower-hid.hwdb - - git diff - - "! git status -s | grep -q ." + - git diff --exit-code + rules: + - if: $CI_PIPELINE_SOURCE == "schedule" + needs: + - container_fedora_build + +# We should really cache this between jobs but a quick clone shouldn't hurt us +.install_libgudev_from_git: &install_libgudev_from_git + - git -c http.sslVerify=false clone --depth=1 https://gitlab.gnome.org/GNOME/libgudev.git libgudev-"$CI_JOB_ID" + - cd libgudev-"$CI_JOB_ID" + - meson "$MESON_BUILDDIR" -Dprefix=/usr + - ninja -C "$MESON_BUILDDIR" install + - cd .. -build: +.build: stage: build before_script: - - git clone https://gitlab.gnome.org/GNOME/libgudev.git - - cd libgudev - - dnf install -y glibc-langpack-fr umockdev-devel - - meson _build -Dprefix=/usr - - ninja -C _build install - - cd .. + - *install_libgudev_from_git script: - - meson _build -Dintrospection=enabled -Dman=true -Dgtk-doc=true -Didevice=enabled - - ninja -C _build - except: - variables: - - $CI_PIPELINE_SOURCE == "schedule" + - .ci/meson-build.sh --skip-test # avoid recompiling in test stage artifacts: name: untracked paths: - "${CI_PROJECT_DIR}" expire_in: 3h30min + variables: + MESON_ARGS: '-Dintrospection=enabled -Dman=true -Dgtk-doc=true -Didevice=enabled' + needs: + - container_fedora_build + +build_fedora: + extends: + - .fedora-defaults + - .build + needs: + - container_fedora_build build_debian: - stage: build - image: registry.freedesktop.org/upower/upower/debian/trixie:latest - before_script: - - apt update - - apt install -y git - - git -c http.sslVerify=false clone https://gitlab.gnome.org/GNOME/libgudev.git - - cd libgudev - - apt install -y umockdev libumockdev-dev libumockdev0 libsystemd-dev systemd - - meson _debian_build -Dprefix=/usr - - ninja -C _debian_build install - - cd .. - script: - - meson _debian_build -Dintrospection=enabled -Dman=true -Dgtk-doc=true -Didevice=enabled - - ninja -C _debian_build - except: - variables: - - $CI_PIPELINE_SOURCE == "schedule" - # avoid recompiling in test stage - artifacts: - name: untracked - paths: - - "${CI_PROJECT_DIR}" - expire_in: 3h30min - + extends: + - .debian-defaults + - .build + needs: + - container_debian_build # Compile test the other backends (they don't have extra dependencies currently) -.build_backend_template: &build_backend +build_backend: + parallel: + matrix: + - BACKEND: [dummy, freebsd, openbsd] + extends: + - .fedora-defaults stage: build script: - - CFLAGS=-DUPOWER_CI_DISABLE_PLATFORM_CODE=1 meson _build -Dos_backend=$backend - - ninja -C _build - except: - variables: - - $CI_PIPELINE_SOURCE == "schedule" - -build_dummy: - variables: - backend: dummy - <<: *build_backend - -build_freebsd: - variables: - backend: freebsd - <<: *build_backend - -build_openbsd: + - .ci/meson-build.sh --skip-test variables: - backend: openbsd - <<: *build_backend + CFLAGS: '-DUPOWER_CI_DISABLE_PLATFORM_CODE=1' + MESON_ARGS: '-Dos_backend=$BACKEND' -test: +.test: stage: test - dependencies: - - build before_script: - git clone https://github.com/zatrazz/glibc-tools.git - cd glibc-tools @@ -154,150 +243,58 @@ - make install - cd .. script: - - meson _build -Dintrospection=enabled -Dman=true -Dgtk-doc=true -Didevice=enabled - - ninja -C _build - - catchsegv meson test -C _build --print-errorlogs --no-stdsplit - - .ci/fail_skipped_tests.py _build/meson-logs/testlog.junit.xml - + - catchsegv meson test -C "$MESON_BUILDDIR" --print-errorlogs --no-stdsplit + - .ci/fail_skipped_tests.py "$MESON_BUILDDIR"/meson-logs/testlog.junit.xml artifacts: when: always expire_in: 1 week paths: - - "${CI_PROJECT_DIR}/_build/meson-logs/" - except: - variables: - - $CI_PIPELINE_SOURCE == "schedule" + - "${CI_PROJECT_DIR}/$MESON_BUILDDIR/meson-logs/" -test_debian: - stage: test - image: registry.freedesktop.org/upower/upower/debian/trixie:latest - dependencies: - - build_debian - before_script: - - git -c http.sslVerify=false clone https://github.com/zatrazz/glibc-tools.git - - cd glibc-tools - - ./configure - - make install - - cd .. - - cd libgudev - - apt update - - apt install -y umockdev libumockdev-dev libumockdev0 libsystemd-dev systemd - - ninja -C _debian_build install - - cd .. - script: - - meson _debian_build -Dintrospection=enabled -Dman=true -Dgtk-doc=true -Didevice=enabled --wipe - - ninja -C _debian_build - - catchsegv meson test -C _debian_build --print-errorlogs --no-stdsplit - - .ci/fail_skipped_tests.py _debian_build/meson-logs/testlog.junit.xml +test_fedora: + extends: + - .fedora-defaults + - .test + needs: + - build_fedora - artifacts: - when: always - expire_in: 1 week - paths: - - "${CI_PROJECT_DIR}/_debian_build/meson-logs/" - except: - variables: - - $CI_PIPELINE_SOURCE == "schedule" +test_debian: + extends: + - .debian-defaults + - .test + needs: + - build_debian check_abi: + extends: + - .fedora-defaults stage: test before_script: - - cd libgudev - - dnf install -y glibc-langpack-fr umockdev-devel - - meson _build -Dprefix=/usr - - ninja -C _build install - - cd .. + - *install_libgudev_from_git script: - check-abi --suppr .ci/upower.suppr --parameters="-Dman=false -Dgtk-doc=false -Didevice=enabled" ${LAST_ABI_BREAK} $(git rev-parse HEAD) - except: - variables: - - $CI_PIPELINE_SOURCE == "schedule" + needs: + - build_fedora # Create docs artifact for the website. # Note that the last successful artifact build is always kept, so 1 day as # expiry is completely fine. docs: + extends: + - .fedora-defaults stage: deploy - dependencies: - - build + needs: + - build_fedora script: - - meson _build -Dintrospection=enabled -Dman=true -Dgtk-doc=true -Didevice=enabled - - ninja -C _build/ UPower-doc + - .ci/meson-build.sh --skip-test artifacts: name: "docs" when: always expire_in: 1 day paths: - - "_build/doc/html" + - "$MESON_BUILDDIR/doc/html" only: - master - except: - variables: - - $CI_PIPELINE_SOURCE == "schedule" - -# CONTAINERS creation stage -container_fedora_build: - extends: .fdo.container-build@fedora - only: - variables: - - $CI_PIPELINE_SOURCE == "schedule" && $CRON_TASK == "BUILD_CI_IMAGES" - variables: - GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image - FDO_FORCE_REBUILD: 1 - # a list of packages to install - FDO_DISTRIBUTION_PACKAGES: - $DEPENDENCIES - FDO_DISTRIBUTION_EXEC: | - curl https://gitlab.freedesktop.org/hadess/check-abi/-/raw/main/contrib/check-abi-fedora.sh | bash - -# CONTAINERS creation stage -container_debian_build: - extends: .fdo.container-build@debian - only: - variables: - - $CI_PIPELINE_SOURCE == "schedule" && $CRON_TASK == "BUILD_CI_IMAGES" variables: - FDO_DISTRIBUTION_TAG: latest - FDO_DISTRIBUTION_VERSION: trixie - GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image - FDO_FORCE_REBUILD: 1 - # a list of packages to install - FDO_DISTRIBUTION_PACKAGES: - autoconf - automake - autopoint - autotools-dev - binutils - binutils-common - binutils-x86-64-linux-gnu - bsdextrautils - build-essential - bzip2 - cpp - cpp-14 - cpp-14-x86-64-linux-gnu - cpp-x86-64-linux-gnu - curl - debhelper - git - g++ - g++-14 - g++-14-x86-64-linux-gnu - g++-x86-64-linux-gnu - gcc - gcc-14 - gcc-14-x86-64-linux-gnu - gcc-x86-64-linux-gnu - m4 - make - systemd-dev - python3-dbus - python3-packaging - python3-dbusmock - gir1.2-upowerglib-1.0 - libpolkit-gobject-1-dev - FDO_DISTRIBUTION_EXEC: >- - echo "deb-src http://deb.debian.org/debian/ trixie main contrib non-free" >> /etc/apt/sources.list && - apt update && - apt build-dep -y upower && - curl https://gitlab.freedesktop.org/hadess/check-abi/-/raw/main/contrib/check-abi-fedora.sh | bash + MESON_ARGS: '-Dintrospection=enabled -Dman=true -Dgtk-doc=true -Didevice=enabled' + NINJA_ARGS: 'UPower-doc' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/HACKING.md new/upower-1.91.3/HACKING.md --- old/upower-1.91.2/HACKING.md 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/HACKING.md 2026-07-02 09:39:04.000000000 +0200 @@ -79,10 +79,12 @@ ```text === begin example commit === short explanation of the commit - + Longer explanation explaining exactly what's changed, whether any external or private interfaces changed, what bugs were fixed (with bug tracker reference if applicable) and so forth. Be concise but not too brief. + + Signed-off-by : Username <[email protected]> === end example commit === ``` @@ -101,6 +103,8 @@ git commit -a --author "Joe Coder <[email protected]>" ``` +- "Signed-off-by:" tags should be included" in the commit message. + ## Coding Style - Please follow the coding style already used. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/NEWS new/upower-1.91.3/NEWS --- old/upower-1.91.2/NEWS 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/NEWS 2026-07-02 09:39:04.000000000 +0200 @@ -1,3 +1,15 @@ +Version 1.91.3 +-------------- +Released: 2026-07-02 + +- Feature: up-device-battery: Prefer "Standard" over "Fast" charging (!316, #344) +- Fix: Resolve potential leaks (!327) +- Fix: Potential out-of-bound access (!328) +- Fix: Improve access control (!326) +- Fix: Remove unused codes (!329) +- Fix: Fix for Asus Battery Charge Threshold Detection (!330, #347) +- CI: code refactoring (!324) + Version 1.91.2 -------------- Released: 2026-04-01 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/libupower-glib/up-client.c new/upower-1.91.3/libupower-glib/up-client.c --- old/upower-1.91.2/libupower-glib/up-client.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/libupower-glib/up-client.c 2026-07-02 09:39:04.000000000 +0200 @@ -238,6 +238,8 @@ gboolean ret; UpDevice *device; + g_return_val_if_fail (UP_IS_CLIENT (client), NULL); + device = up_device_new (); ret = up_device_set_object_path_sync (device, "/org/freedesktop/UPower/devices/DisplayDevice", NULL, NULL); if (!ret) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/meson.build new/upower-1.91.3/meson.build --- old/upower-1.91.2/meson.build 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/meson.build 2026-07-02 09:39:04.000000000 +0200 @@ -1,5 +1,5 @@ project('upower', 'c', - version: '1.91.2', + version: '1.91.3', license: 'GPLv2+', default_options: [ 'buildtype=debugoptimized', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/rules/60-upower-battery.rules new/upower-1.91.3/rules/60-upower-battery.rules --- old/upower-1.91.2/rules/60-upower-battery.rules 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/rules/60-upower-battery.rules 2026-07-02 09:39:04.000000000 +0200 @@ -1,10 +1,10 @@ ACTION=="remove", GOTO="battery_end" -SUBSYSTEM=="power_supply", ATTR{charge_control_start_threshold}!="", \ +SUBSYSTEM=="power_supply", TEST=="charge_control_start_threshold", \ IMPORT{builtin}="hwdb 'battery:$kernel:$attr{model_name}:$attr{[dmi/id]modalias}'", \ GOTO="battery_end" -SUBSYSTEM=="power_supply", ATTR{charge_control_end_threshold}!="", \ +SUBSYSTEM=="power_supply", TEST=="charge_control_end_threshold", \ IMPORT{builtin}="hwdb 'battery:$kernel:$attr{model_name}:$attr{[dmi/id]modalias}'", \ GOTO="battery_end" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/linux/integration-test.py new/upower-1.91.3/src/linux/integration-test.py --- old/upower-1.91.2/src/linux/integration-test.py 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/linux/integration-test.py 2026-07-02 09:39:04.000000000 +0200 @@ -2364,10 +2364,10 @@ with open(f"/sys/class/power_supply/{battery_name}/charge_types") as fp: self.assertEqual(fp.read(), "Standard") - # Battery 2 switches to "Fast" + # Battery 2 switches to "Standard" battery_name = bat2_up.split("_")[-1] with open(f"/sys/class/power_supply/{battery_name}/charge_types") as fp: - self.assertEqual(fp.read(), "Fast") + self.assertEqual(fp.read(), "Standard") def test_battery_charge_limit_multiple_batteries_get_charge_threshold_settings_supported( self, @@ -3707,6 +3707,64 @@ self.stop_daemon() + def test_history_zero_resolution_no_crash(self): + """GetHistory with resolution=0 should not crash the daemon (FPE fix)""" + + self.testbed.add_device( + "power_supply", + "BAT0", + None, + [ + "type", + "Battery", + "present", + "1", + "status", + "Discharging", + "energy_full", + "60000000", + "energy_full_design", + "80000000", + "energy_now", + "50000000", + "voltage_now", + "12000000", + ], + [], + ) + + self.start_daemon() + + devs = self.proxy.EnumerateDevices() + self.assertEqual(len(devs), 1) + bat0_up = devs[0] + + # Allow the initial cold-plug to populate history data + time.sleep(0.5) + + # Before the fix, resolution=0 would cause integer division by zero + # (SIGFPE) inside up_history_array_limit_resolution, crashing the daemon. + result = self.dbus.call_sync( + UP, + bat0_up, + UP_DEVICE, + "GetHistory", + GLib.Variant("(suu)", ("charge", 0, 0)), + GLib.VariantType.new("(a(udu))"), + Gio.DBusCallFlags.NO_AUTO_START, + -1, + None, + ) + + history_data = result.unpack()[0] + self.assertEqual(len(history_data), 0) + + # Verify the daemon is still responsive after the call + devs_after = self.proxy.EnumerateDevices() + self.assertEqual(len(devs_after), 1) + + self.stop_daemon() + def test_battery_id_change(self): """check that we save/load the history correctly when the ID changes""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/linux/up-backend.c new/upower-1.91.3/src/linux/up-backend.c --- old/upower-1.91.2/src/linux/up-backend.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/linux/up-backend.c 2026-07-02 09:39:04.000000000 +0200 @@ -894,6 +894,7 @@ g_clear_object (&backend->priv->daemon); g_clear_object (&backend->priv->device_list); g_clear_object (&backend->priv->gudev_client); + g_clear_object (&backend->priv->udev_enum); bus = g_dbus_proxy_get_connection (backend->priv->logind_proxy); g_dbus_connection_signal_unsubscribe (bus, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/linux/up-device-bluez.c new/upower-1.91.3/src/linux/up-device-bluez.c --- old/upower-1.91.2/src/linux/up-device-bluez.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/linux/up-device-bluez.c 2026-07-02 09:39:04.000000000 +0200 @@ -162,7 +162,11 @@ UpDeviceKind kind; const char *uuid; const char *model; - GVariant *v; + g_autoptr (GVariant) v_appearance = NULL; + g_autoptr (GVariant) v_class = NULL; + g_autoptr (GVariant) v_address = NULL; + g_autoptr (GVariant) v_alias = NULL; + g_autoptr (GVariant) v_percentage = NULL; guchar percentage; /* Static device properties */ @@ -182,30 +186,27 @@ return FALSE; } - v = g_dbus_proxy_get_cached_property (proxy, "Appearance"); - if (v && g_variant_get_uint16 (v) != 0) { + v_appearance = g_dbus_proxy_get_cached_property (proxy, "Appearance"); + v_class = g_dbus_proxy_get_cached_property (proxy, "Class"); + if (v_appearance && g_variant_get_uint16 (v_appearance) != 0) { guint16 appearance; - appearance = g_variant_get_uint16 (v); + appearance = g_variant_get_uint16 (v_appearance); kind = appearance_to_kind (appearance); - g_variant_unref (v); - } else if ((v = g_dbus_proxy_get_cached_property (proxy, "Class"))) { + } else if (v_class) { guint32 class; - class = g_variant_get_uint32 (v); + class = g_variant_get_uint32 (v_class); kind = class_to_kind (class); - g_variant_unref (v); } else { kind = UP_DEVICE_KIND_BLUETOOTH_GENERIC; } - v = g_dbus_proxy_get_cached_property (proxy, "Address"); - uuid = g_variant_get_string (v, NULL); - g_variant_unref (v); - - v = g_dbus_proxy_get_cached_property (proxy, "Alias"); - model = g_variant_get_string (v, NULL); - g_variant_unref (v); + v_address = g_dbus_proxy_get_cached_property (proxy, "Address"); + uuid = g_variant_get_string (v_address, NULL); + + v_alias = g_dbus_proxy_get_cached_property (proxy, "Alias"); + model = g_variant_get_string (v_alias, NULL); /* hardcode some values */ g_object_set (device, @@ -234,7 +235,8 @@ return FALSE; } - percentage = g_variant_get_byte (g_dbus_proxy_get_cached_property (proxy, "Percentage")); + v_percentage = g_dbus_proxy_get_cached_property (proxy, "Percentage"); + percentage = g_variant_get_byte (v_percentage); g_object_set (device, "is-present", TRUE, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/linux/up-device-hid.c new/upower-1.91.3/src/linux/up-device-hid.c --- old/upower-1.91.2/src/linux/up-device-hid.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/linux/up-device-hid.c 2026-07-02 09:39:04.000000000 +0200 @@ -460,7 +460,7 @@ hid = UP_DEVICE_HID (object); g_return_if_fail (hid->priv != NULL); - if (hid->priv->fd > 0) + if (hid->priv->fd >= 0) close (hid->priv->fd); G_OBJECT_CLASS (up_device_hid_parent_class)->finalize (object); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/linux/up-device-supply-battery.c new/upower-1.91.3/src/linux/up-device-supply-battery.c --- old/upower-1.91.2/src/linux/up-device-supply-battery.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/linux/up-device-supply-battery.c 2026-07-02 09:39:04.000000000 +0200 @@ -71,13 +71,7 @@ { UpDeviceBattery parent; gboolean has_coldplug_values; - gboolean coldplug_units; - gdouble *energy_old; - guint energy_old_first; - gdouble rate_old; guint supported_charge_types; - UpDeviceSupplyBatteryChargeTypes charge_type; - UpDeviceSupplyBatteryChargeThresholdSettings charge_threshold_settings; gboolean charge_threshold_by_charge_type; gboolean shown_invalid_voltage_warning; gboolean ignore_system_percentage; @@ -302,12 +296,12 @@ UpDeviceSupplyBattery *self = UP_DEVICE_SUPPLY_BATTERY (device); UpDeviceSupplyBatteryChargeTypes charge_types = self->supported_charge_types; - if (charge_types & UP_DEVICE_SUPPLY_BATTERY_CHARGE_TYPES_FAST) - return UP_DEVICE_SUPPLY_BATTERY_CHARGE_TYPES_FAST; - if (charge_types & UP_DEVICE_SUPPLY_BATTERY_CHARGE_TYPES_STANDARD) return UP_DEVICE_SUPPLY_BATTERY_CHARGE_TYPES_STANDARD; + if (charge_types & UP_DEVICE_SUPPLY_BATTERY_CHARGE_TYPES_FAST) + return UP_DEVICE_SUPPLY_BATTERY_CHARGE_TYPES_FAST; + if (charge_types & UP_DEVICE_SUPPLY_BATTERY_CHARGE_TYPES_ADAPTIVE) return UP_DEVICE_SUPPLY_BATTERY_CHARGE_TYPES_ADAPTIVE; @@ -336,7 +330,6 @@ for (int i = 0; i < g_strv_length(types); i++) { if (g_utf8_strchr (types[i], 1, '[') != NULL) { tmp_type = remove_brackets (types[i]); - self->charge_type = up_device_battery_charge_type_str_to_enum (tmp_type); } else { tmp_type = g_strdup (types[i]); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/linux/up-device-supply.c new/upower-1.91.3/src/linux/up-device-supply.c --- old/upower-1.91.2/src/linux/up-device-supply.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/linux/up-device-supply.c 2026-07-02 09:39:04.000000000 +0200 @@ -265,8 +265,8 @@ /* initial values */ if (!supply->priv->has_coldplug_values) { - gchar *model_name; - gchar *serial_number; + g_autofree gchar *model_name = NULL; + g_autofree gchar *serial_number = NULL; /* get values which may be blank */ model_name = up_device_supply_get_string (native, "model_name"); @@ -286,9 +286,6 @@ /* we only coldplug once, as these values will never change */ supply->priv->has_coldplug_values = TRUE; - - g_free (model_name); - g_free (serial_number); } /* Some devices change whether they're present or not */ @@ -336,9 +333,9 @@ g_autoptr (GUdevDevice) parent_sibling = NULL; UpDeviceKind cur_type, new_type; gboolean is_same_parent = FALSE; - char *new_model_name; - char *model_name; - char *serial_number; + g_autofree gchar *new_model_name = NULL; + g_autofree gchar *model_name = NULL; + g_autofree gchar *serial_number = NULL; int i; struct { const char *prop; @@ -414,7 +411,6 @@ g_object_set (device, "model", model_name, NULL); - g_free (model_name); } if (serial_number == NULL) { @@ -423,7 +419,6 @@ g_object_set (device, "serial", serial_number, NULL); - g_free (serial_number); } new_type = UP_DEVICE_KIND_UNKNOWN; @@ -497,7 +492,6 @@ } else { g_object_set (device, "type", new_type, NULL); } - g_free (new_model_name); } } @@ -549,7 +543,7 @@ up_device_supply_guess_type (GUdevDevice *native, const char *native_path) { - gchar *device_type; + g_autofree gchar *device_type = NULL; UpDeviceKind type = UP_DEVICE_KIND_UNKNOWN; device_type = up_device_supply_get_string (native, "type"); @@ -587,7 +581,6 @@ } out: - g_free (device_type); return type; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/linux/up-device-wup.c new/upower-1.91.3/src/linux/up-device-wup.c --- old/upower-1.91.2/src/linux/up-device-wup.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/linux/up-device-wup.c 2026-07-02 09:39:04.000000000 +0200 @@ -418,7 +418,7 @@ wup = UP_DEVICE_WUP (object); g_return_if_fail (wup->priv != NULL); - if (wup->priv->fd > 0) + if (wup->priv->fd >= 0) close (wup->priv->fd); G_OBJECT_CLASS (up_device_wup_parent_class)->finalize (object); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/linux/up-input.c new/upower-1.91.3/src/linux/up-input.c --- old/upower-1.91.2/src/linux/up-input.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/linux/up-input.c 2026-07-02 09:39:04.000000000 +0200 @@ -91,12 +91,14 @@ up_input_str_to_bitmask (const gchar *s, glong *bitmask, size_t max_size) { gint i, j; - gchar **v; + g_auto (GStrv) v = NULL; gint num_bits_set = 0; + gsize max_elements = max_size / sizeof(glong); memset (bitmask, 0, max_size); - v = g_strsplit (s, " ", max_size); - for (i = g_strv_length (v) - 1, j = 0; i >= 0; i--, j++) { + + v = g_strsplit (s, " ", 0); + for (i = g_strv_length (v) - 1, j = 0; i >= 0 && (size_t) j < max_elements; i--, j++) { gulong val; val = strtoul (v[i], NULL, 16); @@ -107,7 +109,6 @@ val &= (val - 1); } } - g_strfreev(v); return num_bits_set; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/linux/up-kbd-backlight-led.c new/upower-1.91.3/src/linux/up-kbd-backlight-led.c --- old/upower-1.91.2/src/linux/up-kbd-backlight-led.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/linux/up-kbd-backlight-led.c 2026-07-02 09:39:04.000000000 +0200 @@ -181,7 +181,6 @@ UpKbdBacklightLedPrivate *priv = up_kbd_backlight_led_get_instance_private (kbd); gint brightness = 0; gchar buf[16]; - g_autofree gchar *ret_str = NULL; glong len; gchar *end = NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/up-device-battery.c new/upower-1.91.3/src/up-device-battery.c --- old/upower-1.91.2/src/up-device-battery.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/up-device-battery.c 2026-07-02 09:39:04.000000000 +0200 @@ -627,12 +627,12 @@ static gboolean up_device_battery_charge_threshold_state_write(UpDeviceBattery *self, gboolean enabled, const gchar *state_file) { g_autofree gchar *filename = NULL; - GError *error = NULL; + g_autoptr (GError) error = NULL; const gchar *state_dir; state_dir = up_device_battery_get_state_dir (self); filename = g_build_filename (state_dir, state_file, NULL); - if (!g_file_set_contents (filename, enabled ? "1": "0" , -1, &error)) { + if (!g_file_set_contents_full (filename, enabled ? "1": "0" , -1, G_FILE_SET_CONTENTS_CONSISTENT, 0640, &error)) { g_error ("failed to save battery charge threshold: %s", error->message); return FALSE; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/up-device-kbd-backlight.c new/upower-1.91.3/src/up-device-kbd-backlight.c --- old/upower-1.91.2/src/up-device-kbd-backlight.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/up-device-kbd-backlight.c 2026-07-02 09:39:04.000000000 +0200 @@ -364,9 +364,15 @@ static void up_device_kbd_backlight_finalize (GObject *object) { + UpDeviceKbdBacklight *kbd_backlight = UP_DEVICE_KBD_BACKLIGHT (object); + UpDeviceKbdBacklightPrivate *priv = up_device_kbd_backlight_get_instance_private (kbd_backlight); + g_return_if_fail (object != NULL); g_return_if_fail (UP_IS_DEVICE_KBD_BACKLIGHT (object)); + g_clear_object (&priv->daemon); + g_clear_object (&priv->native); + G_OBJECT_CLASS (up_device_kbd_backlight_parent_class)->finalize (object); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/up-device.c new/upower-1.91.3/src/up-device.c --- old/upower-1.91.2/src/up-device.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/up-device.c 2026-07-02 09:39:04.000000000 +0200 @@ -184,7 +184,7 @@ } static gboolean -up_device_history_filter (UpDevice *device, UpHistory *history) +up_device_history_filter (UpDevice *device) { UpExportedDevice *skeleton = UP_EXPORTED_DEVICE (device); @@ -204,7 +204,7 @@ ensure_history (device); - if (!up_device_history_filter (device, priv->history)) + if (!up_device_history_filter (device)) return; /* save new history */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/up-history.c new/upower-1.91.3/src/up-history.c --- old/upower-1.91.2/src/up-history.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/up-history.c 2026-07-02 09:39:04.000000000 +0200 @@ -57,11 +57,6 @@ gchar *dir; }; -enum { - UP_HISTORY_PROGRESS, - UP_HISTORY_LAST_SIGNAL -}; - G_DEFINE_TYPE_WITH_PRIVATE (UpHistory, up_history, G_TYPE_OBJECT) /** @@ -134,6 +129,9 @@ new = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); g_debug ("length of array (before) %i", array->len); + if (max_num == 0) + return new; + /* check length */ length = array->len; if (length == 0) @@ -218,7 +216,7 @@ } /* new data */ - array_new = g_ptr_array_new (); + array_new = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); time_now = g_get_real_time (); g_debug ("limiting data to last %i seconds", timespan); @@ -471,7 +469,7 @@ } /* save to disk */ - ret = g_file_set_contents (filename, part, -1, &error); + ret = g_file_set_contents_full (filename, part, -1, G_FILE_SET_CONTENTS_CONSISTENT, 0640, &error); if (!ret) { g_warning ("failed to set data: %s", error->message); g_error_free (error); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/up-kbd-backlight.c new/upower-1.91.3/src/up-kbd-backlight.c --- old/upower-1.91.2/src/up-kbd-backlight.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/up-kbd-backlight.c 2026-07-02 09:39:04.000000000 +0200 @@ -246,7 +246,6 @@ gchar *path_now = NULL; gchar *path_hw_changed = NULL; gchar *buf_max = NULL; - gchar *buf_now = NULL; GError *error = NULL; kbd_backlight->priv->fd = -1; @@ -313,7 +312,6 @@ g_free (path_now); g_free (path_hw_changed); g_free (buf_max); - g_free (buf_now); return found; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/up-main.c new/upower-1.91.3/src/up-main.c --- old/upower-1.91.2/src/up-main.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/up-main.c 2026-07-02 09:39:04.000000000 +0200 @@ -287,7 +287,7 @@ /* immediately exit */ if (immediate_exit) { - g_timeout_add (50, (GSourceFunc) up_main_timed_exit_cb, state); + timer_id = g_timeout_add (50, (GSourceFunc) up_main_timed_exit_cb, state); g_source_set_name_by_id (timer_id, "[upower] up_main_timed_exit_cb"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/up-polkit.c new/upower-1.91.3/src/up-polkit.c --- old/upower-1.91.2/src/up-polkit.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/up-polkit.c 2026-07-02 09:39:04.000000000 +0200 @@ -137,7 +137,6 @@ up_polkit_finalize (GObject *object) { #ifdef HAVE_POLKIT - g_autoptr (GError) error = NULL; UpPolkit *polkit; g_return_if_fail (UP_IS_POLKIT (object)); polkit = UP_POLKIT (object); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/src/up-self-test.c new/upower-1.91.3/src/up-self-test.c --- old/upower-1.91.2/src/up-self-test.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/src/up-self-test.c 2026-07-02 09:39:04.000000000 +0200 @@ -285,6 +285,8 @@ /* remove these test files */ up_test_history_remove_temp_files (); rmdir (history_dir); + g_free (history_dir); + history_dir = NULL; } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-1.91.2/tools/up-tool.c new/upower-1.91.3/tools/up-tool.c --- old/upower-1.91.2/tools/up-tool.c 2026-04-01 10:20:02.000000000 +0200 +++ new/upower-1.91.3/tools/up-tool.c 2026-07-02 09:39:04.000000000 +0200 @@ -28,11 +28,11 @@ #include <sys/time.h> #include <glib.h> #include <glib/gi18n-lib.h> +#include <glib-unix.h> #include <locale.h> #include "upower.h" -static GMainLoop *loop; static gboolean opt_monitor_detail = FALSE; /** @@ -41,8 +41,8 @@ static gchar * up_tool_get_timestamp (void) { - gchar *str_time; - gchar *timestamp; + g_autofree gchar *str_time = NULL; + g_autofree gchar *timestamp = NULL; time_t the_time; struct timeval time_val; @@ -53,8 +53,7 @@ /* generate header text */ timestamp = g_strdup_printf ("%s.%03i", str_time, (gint) time_val.tv_usec / 1000); - g_free (str_time); - return timestamp; + return g_steal_pointer (×tamp); } /** @@ -63,16 +62,14 @@ static void up_tool_device_added_cb (UpClient *client, UpDevice *device, gpointer user_data) { - gchar *timestamp; - gchar *text = NULL; + g_autofree gchar *timestamp = NULL; + g_autofree gchar *text = NULL; timestamp = up_tool_get_timestamp (); g_print ("[%s]\tdevice added: %s\n", timestamp, up_device_get_object_path (device)); if (opt_monitor_detail) { text = up_device_to_text (device); g_print ("%s\n", text); } - g_free (timestamp); - g_free (text); } /** @@ -81,8 +78,8 @@ static void up_tool_device_changed_cb (UpDevice *device, GParamSpec *pspec, gpointer user_data) { - gchar *timestamp; - gchar *text = NULL; + g_autofree gchar *timestamp = NULL; + g_autofree gchar *text = NULL; timestamp = up_tool_get_timestamp (); g_print ("[%s]\tdevice changed: %s\n", timestamp, up_device_get_object_path (device)); if (opt_monitor_detail) { @@ -90,8 +87,6 @@ text = up_device_to_text (device); g_print ("%s\n", text); } - g_free (timestamp); - g_free (text); } /** @@ -100,12 +95,11 @@ static void up_tool_device_removed_cb (UpClient *client, const char *object_path, gpointer user_data) { - gchar *timestamp; + g_autofree gchar *timestamp = NULL; timestamp = up_tool_get_timestamp (); g_print ("[%s]\tdevice removed: %s\n", timestamp, object_path); if (opt_monitor_detail) g_print ("\n"); - g_free (timestamp); } /** @@ -114,11 +108,11 @@ static void up_client_print (UpClient *client) { - gchar *daemon_version; + g_autofree gchar *daemon_version = NULL; gboolean on_battery; gboolean lid_is_closed; gboolean lid_is_present; - char *action; + g_autofree gchar *action = NULL; g_object_get (client, "daemon-version", &daemon_version, @@ -133,9 +127,6 @@ g_print (" lid-is-present: %s\n", lid_is_present ? "yes" : "no"); action = up_client_get_critical_action (client); g_print (" critical-action: %s\n", action); - g_free (action); - - g_free (daemon_version); } /** @@ -144,23 +135,23 @@ static void up_tool_changed_cb (UpClient *client, GParamSpec *pspec, gpointer user_data) { - gchar *timestamp; + g_autofree gchar *timestamp = NULL; + timestamp = up_tool_get_timestamp (); g_print ("[%s]\tdaemon changed:\n", timestamp); if (opt_monitor_detail) { up_client_print (client); g_print ("\n"); } - g_free (timestamp); } /** * up_tool_do_monitor: **/ static gboolean -up_tool_do_monitor (UpClient *client) +up_tool_do_monitor (UpClient *client, GMainLoop *loop) { - GPtrArray *devices; + g_autoptr (GPtrArray) devices = NULL; guint i; g_print ("Monitoring activity from the power daemon. Press Ctrl+C to cancel.\n"); @@ -265,27 +256,38 @@ return 0; } +static gboolean +up_tool_signal_cb (gpointer user_data) +{ + GMainLoop *loop = user_data; + + g_debug ("Caught signal, exiting"); + g_main_loop_quit (loop); + return G_SOURCE_REMOVE; +} + /** * main: **/ int main (int argc, char **argv) { + g_autoptr (GMainLoop) loop = NULL; GOptionContext *context; gboolean opt_battery = FALSE; gboolean opt_dump = FALSE; gboolean opt_enumerate = FALSE; gboolean opt_monitor = FALSE; - gchar *opt_show_info = FALSE; + g_autofree gchar *opt_show_info = NULL; gboolean opt_version = FALSE; GList *device_filter = NULL; gboolean ret; gint retval; GError *error = NULL; - gchar *text = NULL; + g_autofree gchar *text = NULL; g_autoptr (UpClient) client = NULL; - UpDevice *device; + g_autoptr (UpDevice) device = NULL; const GOptionEntry entries[] = { { "battery", 'b', 0, G_OPTION_ARG_NONE, &opt_battery, _("Dump all parameters for battery objects"), NULL }, @@ -313,7 +315,6 @@ return EXIT_FAILURE; } - loop = g_main_loop_new (NULL, FALSE); client = up_client_new_full (NULL, &error); if (client == NULL) { g_warning ("Cannot connect to upowerd: %s", error->message); @@ -347,7 +348,21 @@ } if (opt_monitor || opt_monitor_detail) { - if (!up_tool_do_monitor (client)) + loop = g_main_loop_new (NULL, FALSE); + + g_unix_signal_add_full (G_PRIORITY_DEFAULT, + SIGINT, + up_tool_signal_cb, + loop, + NULL); + + g_unix_signal_add_full (G_PRIORITY_DEFAULT, + SIGTERM, + up_tool_signal_cb, + loop, + NULL); + + if (!up_tool_do_monitor (client, loop)) return EXIT_FAILURE; return EXIT_SUCCESS; } @@ -361,9 +376,7 @@ } else { text = up_device_to_text (device); g_print ("%s\n", text); - g_free (text); } - g_object_unref (device); return EXIT_SUCCESS; } } ++++++ upower.obsinfo ++++++ --- /var/tmp/diff_new_pack.4wJdfG/_old 2026-07-06 12:28:53.820237674 +0200 +++ /var/tmp/diff_new_pack.4wJdfG/_new 2026-07-06 12:28:53.832238090 +0200 @@ -1,5 +1,5 @@ name: upower -version: 1.91.2 -mtime: 1775031602 -commit: 17f9e8dc5a967fde13be688634a465c71fb79dd0 +version: 1.91.3 +mtime: 1782977944 +commit: 3dc5323bf9f8f84b0a038f5f36c34d49e480ee3c
