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);
|
||||
|
||||
for (e = environ; *e; e++) {
|
||||
if (environ) {
|
||||
|
||||
if (pa_startswith(*e, "PULSE_PROP_")) {
|
||||
size_t kl = strcspn(*e+11, "=");
|
||||
char *k;
|
||||
/* Some applications seem to reset environ to NULL for various
|
||||
* reasons, hence we need to check for this explicitly. See
|
||||
* rhbz #473080 */
|
||||
|
||||
if ((*e)[11+kl] != '=')
|
||||
continue;
|
||||
for (e = environ; *e; e++) {
|
||||
|
||||
if (!pa_utf8_valid(*e+11+kl+1))
|
||||
continue;
|
||||
if (pa_startswith(*e, "PULSE_PROP_")) {
|
||||
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);
|
||||
continue;
|
||||
}
|
||||
|
||||
pa_proplist_sets(p, k, *e+11+kl+1);
|
||||
pa_xfree(k);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue