mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-06 13:29:56 -05:00
Check if environ is actually set before we use it
Some applications seem to set **environ to NULL for various reasons. Before we iterate through it we thus need to make sure it is actually set to make sure we don't segfault. Closes rhbz #473080
This commit is contained in:
parent
2ee9276d97
commit
7013849354
1 changed files with 21 additions and 14 deletions
|
|
@ -44,27 +44,34 @@ void pa_init_proplist(pa_proplist *p) {
|
||||||
|
|
||||||
pa_assert(p);
|
pa_assert(p);
|
||||||
|
|
||||||
for (e = environ; *e; e++) {
|
if (environ) {
|
||||||
|
|
||||||
if (pa_startswith(*e, "PULSE_PROP_")) {
|
/* Some applications seem to reset environ to NULL for various
|
||||||
size_t kl = strcspn(*e+11, "=");
|
* reasons, hence we need to check for this explicitly. See
|
||||||
char *k;
|
* rhbz #473080 */
|
||||||
|
|
||||||
if ((*e)[11+kl] != '=')
|
for (e = environ; *e; e++) {
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!pa_utf8_valid(*e+11+kl+1))
|
if (pa_startswith(*e, "PULSE_PROP_")) {
|
||||||
continue;
|
size_t kl = strcspn(*e+11, "=");
|
||||||
|
char *k;
|
||||||
|
|
||||||
k = pa_xstrndup(*e+11, kl);
|
if ((*e)[11+kl] != '=')
|
||||||
|
continue;
|
||||||
|
|
||||||
if (pa_proplist_contains(p, k)) {
|
if (!pa_utf8_valid(*e+11+kl+1))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
k = pa_xstrndup(*e+11, kl);
|
||||||
|
|
||||||
|
if (pa_proplist_contains(p, k)) {
|
||||||
|
pa_xfree(k);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pa_proplist_sets(p, k, *e+11+kl+1);
|
||||||
pa_xfree(k);
|
pa_xfree(k);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pa_proplist_sets(p, k, *e+11+kl+1);
|
|
||||||
pa_xfree(k);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue