SHA256
1
0
forked from pool/wireplumber

Accepting request 953377 from home:alarrosa:branches:multimedia:libs

- Add patch from upstream to fix va_list APIs for ppc64le and
  aarch64, where va_list is not a pointer (boo#1195818):
  * 0001-spa-json-fix-va_list-APIs-for-different-architectures.patch
- Add patch from upstream to fix a crash if config.properties is
  nil:
  * 0001-restore-stream-do-not-crash-if-config_properties-is-nil.patch

OBS-URL: https://build.opensuse.org/request/show/953377
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/wireplumber?expand=0&rev=32
This commit is contained in:
Antonio Larrosa 2022-02-11 08:22:20 +00:00 committed by Git OBS Bridge
parent 8474834434
commit 3a42ff293f
4 changed files with 249 additions and 1 deletions

View File

@ -0,0 +1,25 @@
From 5f96f69218273573e625475846269b3914cfcecf Mon Sep 17 00:00:00 2001
From: George Kiagiadakis <george.kiagiadakis@collabora.com>
Date: Wed, 9 Feb 2022 13:35:13 +0200
Subject: [PATCH] restore-stream: do not crash if config.properties is nil
Fixes #190
---
src/scripts/restore-stream.lua | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/scripts/restore-stream.lua b/src/scripts/restore-stream.lua
index 404eede5..0c17bdd7 100644
--- a/src/scripts/restore-stream.lua
+++ b/src/scripts/restore-stream.lua
@@ -10,6 +10,7 @@
-- Receive script arguments from config.lua
local config = ... or {}
+config.properties = config.properties or {}
config_restore_props = config.properties["restore-props"] or false
config_restore_target = config.properties["restore-target"] or false
--
GitLab

View File

@ -0,0 +1,212 @@
From e429db7e8c266045aee25e153fb2308bd61fe233 Mon Sep 17 00:00:00 2001
From: Julian Bouzas <julian.bouzas@collabora.com>
Date: Wed, 9 Feb 2022 07:59:59 -0500
Subject: [PATCH] spa-json: fix va_list APIs for different architectures
The va_list type might not always be a pointer in some architectures, so we
cannot guarantee it will be modified after using it for a second time in another
function. This fixes the issue by using macros so args does not get copied, and
always gets modified when using it more than once.
---
lib/wp/spa-json.c | 156 ++++++++++++++++++++++++----------------------
1 file changed, 80 insertions(+), 76 deletions(-)
diff --git a/lib/wp/spa-json.c b/lib/wp/spa-json.c
index f14f395d..c5e59a3e 100644
--- a/lib/wp/spa-json.c
+++ b/lib/wp/spa-json.c
@@ -363,33 +363,33 @@ wp_spa_json_new_string (const gchar *value)
wp_spa_json_builder_new_formatted ("\"%s\"", value));
}
-static void
-wp_spa_json_builder_add_value (WpSpaJsonBuilder *self, const gchar *fmt,
- va_list args)
-{
- switch (*fmt) {
- case 'n':
- wp_spa_json_builder_add_null (self);
- break;
- case 'b':
- wp_spa_json_builder_add_boolean (self, va_arg(args, gboolean));
- break;
- case 'i':
- wp_spa_json_builder_add_int (self, va_arg(args, gint));
- break;
- case 'f':
- wp_spa_json_builder_add_float (self, (float)va_arg(args, double));
- break;
- case 's':
- wp_spa_json_builder_add_string (self, va_arg(args, const gchar *));
- break;
- case 'J':
- wp_spa_json_builder_add_json (self, va_arg(args, WpSpaJson *));
- break;
- default:
- return;
- }
-}
+/* Args is not a pointer in some architectures, so this needs to be a macro to
+ * avoid args being copied */
+#define wp_spa_json_builder_add_value(self,fmt,args) \
+do { \
+ switch (*fmt) { \
+ case 'n': \
+ wp_spa_json_builder_add_null (self); \
+ break; \
+ case 'b': \
+ wp_spa_json_builder_add_boolean (self, va_arg(args, gboolean)); \
+ break; \
+ case 'i': \
+ wp_spa_json_builder_add_int (self, va_arg(args, gint)); \
+ break; \
+ case 'f': \
+ wp_spa_json_builder_add_float (self, (float)va_arg(args, double)); \
+ break; \
+ case 's': \
+ wp_spa_json_builder_add_string (self, va_arg(args, const gchar *)); \
+ break; \
+ case 'J': \
+ wp_spa_json_builder_add_json (self, va_arg(args, WpSpaJson *)); \
+ break; \
+ default: \
+ break; \
+ } \
+} while(false)
/*!
* \brief Creates a spa json of type array
@@ -724,48 +724,46 @@ wp_spa_json_parse_object_valist (WpSpaJson *self, va_list args)
return res;
}
-static gboolean
-wp_spa_json_parse_value (const gchar *data, int len, const gchar *fmt,
- va_list args)
-{
- switch (*fmt) {
- case 'n':
- if (!spa_json_is_null (data, len))
- return FALSE;
- break;
- case 'b':
- if (!wp_spa_json_parse_boolean_internal (data, len,
- va_arg(args, gboolean *)))
- return FALSE;
- break;
- case 'i':
- if (spa_json_parse_int (data, len, va_arg(args, gint *)) < 0)
- return FALSE;
- break;
- case 'f':
- if (spa_json_parse_float (data, len,
- (float *)va_arg(args, double *)) < 0)
- return FALSE;
- break;
- case 's': {
- gchar *str = wp_spa_json_parse_string_internal (data, len);
- if (!str)
- return FALSE;
- *va_arg(args, gchar **) = str;
- break;
- }
- case 'J': {
- WpSpaJson *j = wp_spa_json_new (data, len);
- if (!j)
- return FALSE;
- *va_arg(args, WpSpaJson **) = j;
- break;
- }
- default:
- return FALSE;
- }
- return TRUE;
-}
+/* Args is not a pointer in some architectures, so this needs to be a macro to
+ * avoid args being copied */
+#define wp_spa_json_parse_value(data,len,fmt,args) \
+do { \
+ switch (*fmt) { \
+ case 'n': \
+ if (!spa_json_is_null (data, len)) \
+ return FALSE; \
+ break; \
+ case 'b': \
+ if (!wp_spa_json_parse_boolean_internal (data, len, \
+ va_arg(args, gboolean *))) \
+ return FALSE; \
+ break; \
+ case 'i': \
+ if (spa_json_parse_int (data, len, va_arg(args, gint *)) < 0) \
+ return FALSE; \
+ break; \
+ case 'f': \
+ if (spa_json_parse_float (data, len, va_arg(args, float *)) < 0) \
+ return FALSE; \
+ break; \
+ case 's': { \
+ gchar *str = wp_spa_json_parse_string_internal (data, len); \
+ if (!str) \
+ return FALSE; \
+ *va_arg(args, gchar **) = str; \
+ break; \
+ } \
+ case 'J': { \
+ WpSpaJson *j = wp_spa_json_new (data, len); \
+ if (!j) \
+ return FALSE; \
+ *va_arg(args, WpSpaJson **) = j; \
+ break; \
+ } \
+ default: \
+ return FALSE; \
+ } \
+} while(false)
/*!
* \brief Parses the object property values of a spa json object
@@ -827,8 +825,7 @@ wp_spa_json_object_get_valist (WpSpaJson *self, va_list args)
value = g_value_get_boxed (&item);
if (g_strcmp0 (key_str, lookup_key) == 0) {
- if (!wp_spa_json_parse_value (value->data, value->size, lookup_fmt, args))
- return FALSE;
+ wp_spa_json_parse_value (value->data, value->size, lookup_fmt, args);
lookup_key = va_arg(args, const gchar *);
if (!lookup_key)
return TRUE;
@@ -1366,9 +1363,12 @@ gboolean
wp_spa_json_parser_get_value (WpSpaJsonParser *self, const gchar *fmt,
va_list args)
{
- return wp_spa_json_parser_advance (self) &&
- wp_spa_json_parse_value (self->curr.cur,
- self->curr.end - self->curr.cur, fmt, args);
+ if (wp_spa_json_parser_advance (self)) {
+ wp_spa_json_parse_value (self->curr.cur, self->curr.end - self->curr.cur,
+ fmt, args);
+ return TRUE;
+ }
+ return FALSE;
}
/*!
@@ -1419,9 +1419,13 @@ wp_spa_json_parser_get_valist (WpSpaJsonParser *self, va_list args)
if (!format)
return TRUE;
- /* parse value */
- if (!wp_spa_json_parser_get_value (self, format, args))
+ /* advance */
+ if (!wp_spa_json_parser_advance (self))
return FALSE;
+
+ /* parse value */
+ wp_spa_json_parse_value (self->curr.cur, self->curr.end - self->curr.cur,
+ format, args);
} while (TRUE);
return FALSE;
--
GitLab

View File

@ -1,3 +1,13 @@
-------------------------------------------------------------------
Fri Feb 11 08:09:05 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>
- Add patch from upstream to fix va_list APIs for ppc64le and
aarch64, where va_list is not a pointer (boo#1195818):
* 0001-spa-json-fix-va_list-APIs-for-different-architectures.patch
- Add patch from upstream to fix a crash if config.properties is
nil:
* 0001-restore-stream-do-not-crash-if-config_properties-is-nil.patch
-------------------------------------------------------------------
Mon Feb 7 17:31:11 UTC 2022 - Antonio Larrosa <alarrosa@suse.com>

View File

@ -30,7 +30,8 @@ Group: Development/Libraries/C and C++
URL: https://gitlab.freedesktop.org/pipewire/wireplumber
Source0: wireplumber-%{version}.tar.xz
Source1: split-config-file.py
Patch0: 0001-spa-json-fix-va_list-APIs-for-different-architectures.patch
Patch1: 0001-restore-stream-do-not-crash-if-config_properties-is-nil.patch
Patch100: reduce-meson-required-version.patch
# docs
BuildRequires: doxygen