Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package xdg-dbus-proxy for openSUSE:Factory 
checked in at 2023-10-03 20:14:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xdg-dbus-proxy (Old)
 and      /work/SRC/openSUSE:Factory/.xdg-dbus-proxy.new.28202 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xdg-dbus-proxy"

Tue Oct  3 20:14:59 2023 rev:6 rq:1114704 version:0.1.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/xdg-dbus-proxy/xdg-dbus-proxy.changes    
2023-01-14 00:02:26.669440657 +0100
+++ /work/SRC/openSUSE:Factory/.xdg-dbus-proxy.new.28202/xdg-dbus-proxy.changes 
2023-10-03 20:15:36.387240789 +0200
@@ -1,0 +2,8 @@
+Fri Sep 29 06:20:45 UTC 2023 - Bjørn Lie <[email protected]>
+
+- Update to version 0.1.5:
+  + Fix handling of object paths > 255 bytes
+  + Print better errors when message parsing fails
+  + Optionally install tests for "as-installed" testing
+
+-------------------------------------------------------------------

Old:
----
  xdg-dbus-proxy-0.1.4.tar.xz

New:
----
  xdg-dbus-proxy-0.1.5.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xdg-dbus-proxy.spec ++++++
--- /var/tmp/diff_new_pack.hnTwGF/_old  2023-10-03 20:15:56.811977439 +0200
+++ /var/tmp/diff_new_pack.hnTwGF/_new  2023-10-03 20:15:56.811977439 +0200
@@ -18,7 +18,7 @@
 
 
 Name:           xdg-dbus-proxy
-Version:        0.1.4
+Version:        0.1.5
 Release:        0
 Summary:        Filtering proxy for D-Bus connections
 License:        LGPL-2.1-or-later

++++++ xdg-dbus-proxy-0.1.4.tar.xz -> xdg-dbus-proxy-0.1.5.tar.xz ++++++
++++ 2842 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/NEWS new/xdg-dbus-proxy-0.1.5/NEWS
--- old/xdg-dbus-proxy-0.1.4/NEWS       2022-05-11 11:12:03.000000000 +0200
+++ new/xdg-dbus-proxy-0.1.5/NEWS       2023-08-07 09:54:47.000000000 +0200
@@ -1,3 +1,12 @@
+Changes in 0.1.5
+================
+
+Released 2023-08-07
+
+  * Fix handling of object paths > 255 bytes
+  * Print better errors when message parsing fails
+  * Optionally install tests for "as-installed" testing
+
 Changes in 0.1.4
 ================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/aminclude_static.am 
new/xdg-dbus-proxy-0.1.5/aminclude_static.am
--- old/xdg-dbus-proxy-0.1.4/aminclude_static.am        2022-05-11 
11:15:06.000000000 +0200
+++ new/xdg-dbus-proxy-0.1.5/aminclude_static.am        2023-08-07 
09:54:57.000000000 +0200
@@ -1,6 +1,6 @@
 
 # aminclude_static.am generated automatically by Autoconf
-# from AX_AM_MACROS_STATIC on Wed May 11 10:15:06 BST 2022
+# from AX_AM_MACROS_STATIC on Mon Aug  7 09:54:57 CEST 2023
 
 
 # Code coverage
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/compile new/xdg-dbus-proxy-0.1.5/compile
--- old/xdg-dbus-proxy-0.1.4/compile    1970-01-01 01:00:00.000000000 +0100
+++ new/xdg-dbus-proxy-0.1.5/compile    2018-09-13 09:02:05.000000000 +0200
@@ -0,0 +1,348 @@
+#!/bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2016-01-11.22; # UTC
+
+# Copyright (C) 1999-2017 Free Software Foundation, Inc.
+# Written by Tom Tromey <[email protected]>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <[email protected]> or send patches to
+# <[email protected]>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""       $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+       # lazily determine how to convert abs files
+       case `uname -s` in
+         MINGW*)
+           file_conv=mingw
+           ;;
+         CYGWIN*)
+           file_conv=cygwin
+           ;;
+         *)
+           file_conv=wine
+           ;;
+       esac
+      fi
+      case $file_conv/,$2, in
+       *,$file_conv,*)
+         ;;
+       mingw/*)
+         file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+         ;;
+       cygwin/*)
+         file=`cygpath -m "$file" || echo "$file"`
+         ;;
+       wine/*)
+         file=`winepath -w "$file" || echo "$file"`
+         ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+       -o)
+         # configure might choose to run compile as 'compile cc -o foo foo.c'.
+         eat=1
+         case $2 in
+           *.o | *.[oO][bB][jJ])
+             func_file_conv "$2"
+             set x "$@" -Fo"$file"
+             shift
+             ;;
+           *)
+             func_file_conv "$2"
+             set x "$@" -Fe"$file"
+             shift
+             ;;
+         esac
+         ;;
+       -I)
+         eat=1
+         func_file_conv "$2" mingw
+         set x "$@" -I"$file"
+         shift
+         ;;
+       -I*)
+         func_file_conv "${1#-I}" mingw
+         set x "$@" -I"$file"
+         shift
+         ;;
+       -l)
+         eat=1
+         func_cl_dashl "$2"
+         set x "$@" "$lib"
+         shift
+         ;;
+       -l*)
+         func_cl_dashl "${1#-l}"
+         set x "$@" "$lib"
+         shift
+         ;;
+       -L)
+         eat=1
+         func_cl_dashL "$2"
+         ;;
+       -L*)
+         func_cl_dashL "${1#-L}"
+         ;;
+       -static)
+         shared=false
+         ;;
+       -Wl,*)
+         arg=${1#-Wl,}
+         save_ifs="$IFS"; IFS=','
+         for flag in $arg; do
+           IFS="$save_ifs"
+           linker_opts="$linker_opts $flag"
+         done
+         IFS="$save_ifs"
+         ;;
+       -Xlinker)
+         eat=1
+         linker_opts="$linker_opts $2"
+         ;;
+       -*)
+         set x "$@" "$1"
+         shift
+         ;;
+       *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+         func_file_conv "$1"
+         set x "$@" -Tp"$file"
+         shift
+         ;;
+       *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+         func_file_conv "$1" mingw
+         set x "$@" "$file"
+         shift
+         ;;
+       *)
+         set x "$@" "$1"
+         shift
+         ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <[email protected]>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+       # configure might choose to run compile as 'compile cc -o foo foo.c'.
+       # So we strip '-o arg' only if arg is an object.
+       eat=1
+       case $2 in
+         *.o | *.obj)
+           ofile=$2
+           ;;
+         *)
+           set x "$@" -o "$2"
+           shift
+           ;;
+       esac
+       ;;
+      *.c)
+       cfile=$1
+       set x "$@" "$1"
+       shift
+       ;;
+      *)
+       set x "$@" "$1"
+       shift
+       ;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no '-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # '.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/configure.ac new/xdg-dbus-proxy-0.1.5/configure.ac
--- old/xdg-dbus-proxy-0.1.4/configure.ac       2022-05-11 11:12:57.000000000 
+0200
+++ new/xdg-dbus-proxy-0.1.5/configure.ac       2023-08-07 09:54:47.000000000 
+0200
@@ -1,6 +1,6 @@
 AC_PREREQ([2.63])
 
-AC_INIT([xdg-dbus-proxy],[0.1.4])
+AC_INIT([xdg-dbus-proxy],[0.1.5])
 AC_CONFIG_AUX_DIR([build-aux])
 
 m4_pattern_forbid([^AX_CODE_COVERAGE$],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/flatpak-proxy.c 
new/xdg-dbus-proxy-0.1.5/flatpak-proxy.c
--- old/xdg-dbus-proxy-0.1.4/flatpak-proxy.c    2022-04-23 18:50:29.000000000 
+0200
+++ new/xdg-dbus-proxy-0.1.5/flatpak-proxy.c    2023-08-07 09:38:09.000000000 
+0200
@@ -1114,23 +1114,43 @@
 }
 
 static const char *
-get_string (Buffer *buffer, Header *header, guint32 *offset, guint32 
end_offset)
+get_string (Buffer *buffer, Header *header, guint32 *offset, guint32 
end_offset, GError **error)
 {
-  guint8 len;
+  guint32 len;
   char *str;
 
   *offset = align_by_4 (*offset);
   if (*offset + 4  >= end_offset)
-    return FALSE;
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_DATA,
+                   "String header would align past boundary");
+      return FALSE;
+    }
 
   len = read_uint32 (header, &buffer->data[*offset]);
   *offset += 4;
 
   if ((*offset) + len + 1 > end_offset)
-    return FALSE;
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_DATA,
+                   "String would align past boundary");
+      return FALSE;
+    }
 
   if (buffer->data[(*offset) + len] != 0)
-    return FALSE;
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_DATA,
+                   "String is not nul-terminated (%.*s)",
+                   buffer->data[(*offset) + len],
+                   (char *) &buffer->data[(*offset)]);
+      return FALSE;
+    }
 
   str = (char *) &buffer->data[(*offset)];
   *offset += len + 1;
@@ -1146,31 +1166,69 @@
   g_free (header);
 }
 
+static const char *
+header_debug_str (GString *s, Header *header)
+{
+  if (header->path)
+    g_string_append_printf (s, "\n\tPath: %s", header->path);
+  if (header->interface)
+    g_string_append_printf (s, "\n\tInterface: %s", header->interface);
+  if (header->member)
+    g_string_append_printf (s, "\n\tMember: %s", header->member);
+  if (header->error_name)
+    g_string_append_printf (s, "\n\tError name: %s", header->error_name);
+  if (header->destination)
+    g_string_append_printf (s, "\n\tDestination: %s", header->destination);
+  if (header->sender)
+    g_string_append_printf (s, "\n\tSender: %s", header->sender);
+  return s->str;
+}
+
 static Header *
-parse_header (Buffer *buffer, guint32 serial_offset, guint32 
reply_serial_offset, guint32 hello_serial)
+parse_header (Buffer *buffer, guint32 serial_offset, guint32 
reply_serial_offset, guint32 hello_serial, GError **error)
 {
   guint32 array_len, header_len;
   guint32 offset, end_offset;
   guint8 header_type;
   guint32 reply_serial_pos = 0;
   const char *signature;
+  g_autoptr(GError) str_error = NULL;
+  g_autoptr(GString) header_str = NULL;
 
   g_autoptr(Header) header = g_new0 (Header, 1);
 
   header->buffer = buffer_ref (buffer);
 
   if (buffer->size < 16)
-    return NULL;
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_DATA,
+                   "Buffer too small: %"G_GSIZE_FORMAT, buffer->size);
+      return NULL;
+    }
 
   if (buffer->data[3] != 1) /* Protocol version */
-    return NULL;
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_DATA,
+                   "Wrong protocol version: %d", buffer->data[3]);
+      return NULL;
+    }
 
   if (buffer->data[0] == 'B')
     header->big_endian = TRUE;
   else if (buffer->data[0] == 'l')
     header->big_endian = FALSE;
   else
-    return NULL;
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_DATA,
+                   "Invalid endianess marker: %c", buffer->data[0]);
+      return NULL;
+    }
 
   header->type = buffer->data[1];
   header->flags = buffer->data[2];
@@ -1179,72 +1237,184 @@
   header->serial = read_uint32 (header, &buffer->data[8]);
 
   if (header->serial == 0)
-    return NULL;
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_DATA,
+                   "No serial");
+      return NULL;
+    }
 
   array_len = read_uint32 (header, &buffer->data[12]);
 
   header_len = align_by_8 (12 + 4 + array_len);
   g_assert (buffer->size >= header_len); /* We should have verified this when 
reading in the message */
   if (header_len > buffer->size)
-    return NULL;
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_DATA,
+                   "Header len (%d) bigger than buffer size 
(%"G_GSIZE_FORMAT")",
+                   header_len, buffer->size);
+      return NULL;
+    }
 
   offset = 12 + 4;
   end_offset = offset + array_len;
 
+  header_str = g_string_new (NULL);
+
   while (offset < end_offset)
     {
       offset = align_by_8 (offset); /* Structs must be 8 byte aligned */
       if (offset >= end_offset)
-        return NULL;
+        {
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Struct would align past boundary%s",
+                       header_debug_str (header_str, header));
+          return NULL;
+        }
 
       header_type = buffer->data[offset++];
       if (offset >= end_offset)
-        return NULL;
+        {
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Went past boundary after parsing header_type%s",
+                       header_debug_str (header_str, header));
+          return NULL;
+        }
 
       signature = get_signature (buffer, &offset, end_offset);
       if (signature == NULL)
-        return NULL;
+        {
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Could not parse signature%s",
+                       header_debug_str (header_str, header));
+          return NULL;
+        }
 
       switch (header_type)
         {
         case G_DBUS_MESSAGE_HEADER_FIELD_INVALID:
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Field is invalid%s",
+                       header_debug_str (header_str, header));
           return NULL;
 
         case G_DBUS_MESSAGE_HEADER_FIELD_PATH:
           if (strcmp (signature, "o") != 0)
-            return NULL;
-          header->path = get_string (buffer, header, &offset, end_offset);
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Signature is invalid for path ('%s')%s",
+                           signature,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
+          header->path = get_string (buffer, header, &offset, end_offset, 
&str_error);
           if (header->path == NULL)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Could not parse path in path field: %s%s",
+                           str_error->message,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
           break;
 
         case G_DBUS_MESSAGE_HEADER_FIELD_INTERFACE:
           if (strcmp (signature, "s") != 0)
-            return NULL;
-          header->interface = get_string (buffer, header, &offset, end_offset);
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Signature is invalid for interface ('%s')%s",
+                           signature,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
+          header->interface = get_string (buffer, header, &offset, end_offset, 
&str_error);
           if (header->interface == NULL)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Could not parse interface in interface field: 
%s%s",
+                           str_error->message,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
           break;
 
         case G_DBUS_MESSAGE_HEADER_FIELD_MEMBER:
           if (strcmp (signature, "s") != 0)
-            return NULL;
-          header->member = get_string (buffer, header, &offset, end_offset);
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Signature is invalid for member ('%s')%s",
+                           signature,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
+          header->member = get_string (buffer, header, &offset, end_offset, 
&str_error);
           if (header->member == NULL)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Could not parse member in member field: %s%s",
+                           str_error->message,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
           break;
 
         case G_DBUS_MESSAGE_HEADER_FIELD_ERROR_NAME:
           if (strcmp (signature, "s") != 0)
-            return NULL;
-          header->error_name = get_string (buffer, header, &offset, 
end_offset);
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Signature is invalid for error ('%s')%s",
+                           signature,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
+          header->error_name = get_string (buffer, header, &offset, 
end_offset, &str_error);
           if (header->error_name == NULL)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Could not parse error in error field: %s%s",
+                           str_error->message,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
           break;
 
         case G_DBUS_MESSAGE_HEADER_FIELD_REPLY_SERIAL:
           if (offset + 4 > end_offset)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Header too small to fit reply serial%s",
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
 
           header->has_reply_serial = TRUE;
           reply_serial_pos = offset;
@@ -1254,31 +1424,85 @@
 
         case G_DBUS_MESSAGE_HEADER_FIELD_DESTINATION:
           if (strcmp (signature, "s") != 0)
-            return NULL;
-          header->destination = get_string (buffer, header, &offset, 
end_offset);
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Signature is invalid for destination ('%s')%s",
+                           signature,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
+          header->destination = get_string (buffer, header, &offset, 
end_offset, &str_error);
           if (header->destination == NULL)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Could not parse destination in destination field: 
%s%s",
+                           str_error->message,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
           break;
 
         case G_DBUS_MESSAGE_HEADER_FIELD_SENDER:
           if (strcmp (signature, "s") != 0)
-            return NULL;
-          header->sender = get_string (buffer, header, &offset, end_offset);
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Signature is invalid for sender ('%s')%s",
+                           signature,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
+          header->sender = get_string (buffer, header, &offset, end_offset, 
&str_error);
           if (header->sender == NULL)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Could not parse sender in sender field: %s%s",
+                           str_error->message,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
           break;
 
         case G_DBUS_MESSAGE_HEADER_FIELD_SIGNATURE:
           if (strcmp (signature, "g") != 0)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Signature is invalid for signature ('%s')%s",
+                           signature,
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
           header->signature = get_signature (buffer, &offset, end_offset);
           if (header->signature == NULL)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Could not parse signature in signature field%s",
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
           break;
 
         case G_DBUS_MESSAGE_HEADER_FIELD_NUM_UNIX_FDS:
           if (offset + 4 > end_offset)
-            return NULL;
+            {
+              g_set_error (error,
+                           G_IO_ERROR,
+                           G_IO_ERROR_INVALID_DATA,
+                           "Header too small to fit Unix FDs%s",
+                           header_debug_str (header_str, header));
+              return NULL;
+            }
 
           header->unix_fds = read_uint32 (header, &buffer->data[offset]);
           offset += 4;
@@ -1286,6 +1510,12 @@
 
         default:
           /* Unknown header field, for safety, fail parse */
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Unknown header field (%d)%s",
+                       header_type,
+                       header_debug_str (header_str, header));
           return NULL;
         }
     }
@@ -1294,31 +1524,72 @@
     {
     case G_DBUS_MESSAGE_TYPE_METHOD_CALL:
       if (header->path == NULL || header->member == NULL)
-        return NULL;
+        {
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Method call is missing path or member%s",
+                       header_debug_str (header_str, header));
+          return NULL;
+        }
       break;
 
     case G_DBUS_MESSAGE_TYPE_METHOD_RETURN:
       if (!header->has_reply_serial)
-        return NULL;
+        {
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Method return has no reply serial%s",
+                       header_debug_str (header_str, header));
+          return NULL;
+        }
       break;
 
     case G_DBUS_MESSAGE_TYPE_ERROR:
       if (header->error_name  == NULL || !header->has_reply_serial)
-        return NULL;
+        {
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Error is missing error name or reply serial%s",
+                       header_debug_str (header_str, header));
+          return NULL;
+        }
       break;
 
     case G_DBUS_MESSAGE_TYPE_SIGNAL:
       if (header->path == NULL ||
           header->interface == NULL ||
           header->member == NULL)
-        return NULL;
+        {
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Signal is missing path, interface or member%s",
+                       header_debug_str (header_str, header));
+          return NULL;
+        }
       if (strcmp (header->path, "/org/freedesktop/DBus/Local") == 0 ||
           strcmp (header->interface, "org.freedesktop.DBus.Local") == 0)
-        return NULL;
+        {
+          g_set_error (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_INVALID_DATA,
+                       "Signal is to D-Bus Local path or interface%s",
+                       header_debug_str (header_str, header));
+          return NULL;
+        }
       break;
 
     default:
       /* Unknown message type, for safety, fail parse */
+      g_set_error (error,
+                   G_IO_ERROR,
+                   G_IO_ERROR_INVALID_DATA,
+                   "Unknown message type (%d)%s",
+                   header->type,
+                   header_debug_str (header_str, header));
       return NULL;
     }
 
@@ -2163,14 +2434,16 @@
   if (client->authenticated && client->proxy->filter)
     {
       g_autoptr(Header) header = NULL;
+      g_autoptr(GError) error = NULL;
       BusHandler handler;
 
       /* Filter and rewrite outgoing messages as needed */
 
-      header = parse_header (buffer, client->serial_offset, 0, 0);
+      header = parse_header (buffer, client->serial_offset, 0, 0, &error);
       if (header == NULL)
         {
-          g_warning ("Invalid message header format");
+          g_warning ("Invalid message header format from client: %s",
+                     error->message);
           side_closed (side);
           buffer_unref (buffer);
           return;
@@ -2271,18 +2544,18 @@
 
           if (client_message_generates_reply (header))
             {
-              const char *error;
+              const char *error_str;
 
               if (client->proxy->log_messages)
                 g_print ("*HIDDEN* (ping)\n");
 
               if ((header->destination != NULL && header->destination[0] == 
':') ||
                   (header->flags & G_DBUS_MESSAGE_FLAGS_NO_AUTO_START) != 0)
-                error = "org.freedesktop.DBus.Error.NameHasNoOwner";
+                error_str = "org.freedesktop.DBus.Error.NameHasNoOwner";
               else
-                error = "org.freedesktop.DBus.Error.ServiceUnknown";
+                error_str = "org.freedesktop.DBus.Error.ServiceUnknown";
 
-              buffer = get_error_for_roundtrip (client, header, error);
+              buffer = get_error_for_roundtrip (client, header, error_str);
               expecting_reply = EXPECTED_REPLY_REWRITE;
             }
           else
@@ -2331,16 +2604,18 @@
   if (client->authenticated && client->proxy->filter)
     {
       g_autoptr(Header) header = NULL;
+      g_autoptr(GError) error = NULL;
       GDBusMessage *rewritten;
       FlatpakPolicy policy;
       ExpectedReplyType expected_reply;
 
       /* Filter and rewrite incoming messages as needed */
 
-      header = parse_header (buffer, 0, client->serial_offset, 
client->hello_serial);
+      header = parse_header (buffer, 0, client->serial_offset, 
client->hello_serial, &error);
       if (header == NULL)
         {
-          g_warning ("Invalid message header format");
+          g_warning ("Invalid message header format from bus: %s",
+                     error->message);
           buffer_unref (buffer);
           side_closed (side);
           return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/meson.build new/xdg-dbus-proxy-0.1.5/meson.build
--- old/xdg-dbus-proxy-0.1.4/meson.build        2022-05-11 11:13:17.000000000 
+0200
+++ new/xdg-dbus-proxy-0.1.5/meson.build        2023-08-07 09:54:47.000000000 
+0200
@@ -1,7 +1,7 @@
 project(
   'xdg-dbus-proxy',
   'c',
-  version : '0.1.4',
+  version : '0.1.5',
   meson_version : '>=0.49.0',
   default_options : [
     'warning_level=2',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/meson_options.txt 
new/xdg-dbus-proxy-0.1.5/meson_options.txt
--- old/xdg-dbus-proxy-0.1.4/meson_options.txt  2022-04-23 18:50:29.000000000 
+0200
+++ new/xdg-dbus-proxy-0.1.5/meson_options.txt  2023-08-07 09:38:09.000000000 
+0200
@@ -1,4 +1,10 @@
 option(
+  'installed_tests',
+  type : 'boolean',
+  description : 'Build and install "as-installed" tests',
+  value : 'false',
+)
+option(
   'man',
   type : 'feature',
   description : 'generate man pages',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/missing new/xdg-dbus-proxy-0.1.5/missing
--- old/xdg-dbus-proxy-0.1.4/missing    1970-01-01 01:00:00.000000000 +0100
+++ new/xdg-dbus-proxy-0.1.5/missing    2018-09-13 09:02:05.000000000 +0200
@@ -0,0 +1,215 @@
+#!/bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2016-01-11.22; # UTC
+
+# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <[email protected]>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try '$0 --help' for more information"
+  exit 1
+fi
+
+case $1 in
+
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
+
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <[email protected]>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'autom4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
+    ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/tests/Makefile.am.inc 
new/xdg-dbus-proxy-0.1.5/tests/Makefile.am.inc
--- old/xdg-dbus-proxy-0.1.4/tests/Makefile.am.inc      2022-04-23 
18:47:31.000000000 +0200
+++ new/xdg-dbus-proxy-0.1.5/tests/Makefile.am.inc      2023-08-07 
09:38:09.000000000 +0200
@@ -13,6 +13,7 @@
 test_proxy_LDADD = $(COMMON_LIBS)
 
 EXTRA_DIST += tests/meson.build
+EXTRA_DIST += tests/tap.test.in
 EXTRA_DIST += tests/use-as-subproject/README
 EXTRA_DIST += tests/use-as-subproject/config.h
 EXTRA_DIST += tests/use-as-subproject/dummy-config.h.in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/tests/meson.build 
new/xdg-dbus-proxy-0.1.5/tests/meson.build
--- old/xdg-dbus-proxy-0.1.4/tests/meson.build  2022-04-23 18:47:31.000000000 
+0200
+++ new/xdg-dbus-proxy-0.1.5/tests/meson.build  2023-08-07 09:38:09.000000000 
+0200
@@ -1,3 +1,7 @@
+enable_installed_tests = get_option('installed_tests') and not 
meson.is_subproject()
+installed_testdir = get_option('libexecdir') / 'installed-tests' / 
meson.project_name()
+installed_tests_metadir = get_option('datadir') / 'installed-tests' / 
meson.project_name()
+
 test_programs = [
   [
     'test-proxy',
@@ -6,6 +10,8 @@
       'test-proxy.c',
       dependencies : common_deps,
       include_directories : common_include_directories,
+      install : enable_installed_tests,
+      install_dir : installed_testdir,
     ),
   ],
 ]
@@ -32,4 +38,16 @@
       env : test_env,
     )
   endif
+
+  if enable_installed_tests
+    configure_file(
+      input : 'tap.test.in',
+      output : name + '.test',
+      configuration : {
+        'basename' : name,
+        'installed_testdir' : get_option('prefix') / installed_testdir,
+      },
+      install_dir : installed_tests_metadir,
+    )
+  endif
 endforeach
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/xdg-dbus-proxy-0.1.4/tests/tap.test.in 
new/xdg-dbus-proxy-0.1.5/tests/tap.test.in
--- old/xdg-dbus-proxy-0.1.4/tests/tap.test.in  1970-01-01 01:00:00.000000000 
+0100
+++ new/xdg-dbus-proxy-0.1.5/tests/tap.test.in  2023-08-07 09:38:09.000000000 
+0200
@@ -0,0 +1,4 @@
+[Test]
+Type=session
+Exec=@installed_testdir@/@basename@ --tap
+Output=TAP

Reply via email to