[Fontconfig] fontconfig: Branch 'master'
Behdad Esfahbod
behdad at behdad.org
Thu Jan 17 17:27:54 PST 2013
Damn. It wasn't exactly compiler-catchable. Thanks for the catch. Fixed.
On 13-01-17 07:21 PM, Raimund Steger wrote:
> Behdad Esfahbod wrote:
>> [...]
>> diff --git a/src/fcdefault.c b/src/fcdefault.c
>> index 88978b8..2d7c4f7 100644
>> --- a/src/fcdefault.c
>> +++ b/src/fcdefault.c
>> [...]
>> - char buf[8192];
>> + char buf[PATH_MAX + 1];
>> unsigned int len;
>
> I think something can still go wrong there: readlink can return -1, but due to
> 'len' being unsigned it can enter the 'if' branch.
>
> If I simulate a readlink failure by using an invalid path:
>
>
> [...]
> (gdb) run
> Starting program: /home/rs/testing/fontconfig-git/bin/fc-match
> [Thread debugging using libthread_db enabled]
>
> Breakpoint 1, FcGetPrgname () at fcdefault.c:115
> 115 prgname = fc_atomic_ptr_get (&default_prgname);
> (gdb) next
> 116 if (!prgname)
> (gdb) next
> 152 char *p = NULL;
> (gdb) next
> 154 len = readlink ("/proc/self/exeINVALID", buf, sizeof (buf) - 1);
> (gdb) next
> 155 if (len > 0)
> (gdb) print len
> $1 = 4294967295
> (gdb) next
> 157 buf[len] = '\0';
> (gdb)
>
>
> It works if I use 'int'. (See patch.)
>
> Raimund
>
>
>
>
>
>
>
>
>
>> + char *p = NULL;
>>
>> +#if defined (HAVE_GETPROGNAME) && defined (HAVE_REALPATH)
>> + const char *q = getprogname ();
>> + if (q)
>> + p = realpath (q, buf);
>> +#else
>> len = readlink ("/proc/self/exe", buf, sizeof (buf) - 1);
>> if (len > 0)
>> {
>> - char *p;
>> + buf[len] = '\0';
>> + p = buf;
>> + }
>> +#endif
>>
>> - p = strrchr (buf, '/');
>> - if (p)
>> - p++;
>> + if (p)
>> + {
>> + char *r = strrchr (p, '/');
>> + if (r)
>> + r++;
>> else
>> - p = buf;
>> + r = p;
>>
>> - prgname = FcStrdup (p);
>> + prgname = FcStrdup (r);
>> }
>> -#endif
>>
>> if (!prgname)
>> prgname = FcStrdup ("");
>> @@ -175,6 +176,7 @@ retry:
>> free (prgname);
>> goto retry;
>> }
>> +#endif
>> }
>>
>> if (prgname && !prgname[0])
>> _______________________________________________
>> Fontconfig mailing list
>> Fontconfig at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/fontconfig
>>
>
>
--
behdad
http://behdad.org/
More information about the Fontconfig
mailing list