David Sharp schrieb:
> On Sun, Jun 14, 2009 at 12:06 AM, Ben Gamari<bgamari.f...@gmail.com> wrote:
>> Fix compiler warning:
>>
>> imLcIm.c:364: warning: format ‘%03x’ expects type ‘unsigned int’, but 
>> argument 6 has type ‘long unsigned int’
>> imLcIm.c:367: warning: format ‘%03x’ expects type ‘unsigned int’, but 
>> argument 6 has type ‘long unsigned int’
>> ---
>>  modules/im/ximcp/imLcIm.c |    8 ++++----
>>  1 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/modules/im/ximcp/imLcIm.c b/modules/im/ximcp/imLcIm.c
>> index 17121b5..e398112 100644
>> --- a/modules/im/ximcp/imLcIm.c
>> +++ b/modules/im/ximcp/imLcIm.c
>> @@ -363,11 +363,11 @@ Private int _XimCachedFileName (
>>     *res  = Xmalloc (len + 1 + 27 + 1);  /* Max VERSION 9999 */
>>
>>     if (len == 0 || dir [len-1] != '/')
>> -       sprintf (*res, "%s/%c%d_%03x_%08x_%08x", dir, _XimGetMyEndian(),
>> -               XIM_CACHE_VERSION, sizeof (DefTree), hash, hash2);
>> +       sprintf (*res, "%s/%c%d_%03lx_%08x_%08x", dir, _XimGetMyEndian(),
>> +               XIM_CACHE_VERSION, sizeof(DefTree), hash, hash2);
> 
> This will break systems where size_t is 32 bits. 'z' is the correct
> length modifier for size_t
> 
>>     else
>> -       sprintf (*res, "%s%c%d_%03x_%08x_%08x", dir, _XimGetMyEndian(),
>> -               XIM_CACHE_VERSION, sizeof (DefTree), hash, hash2);
>> +       sprintf (*res, "%s%c%d_%03lx_%08x_%08x", dir, _XimGetMyEndian(),
>> +               XIM_CACHE_VERSION, sizeof(DefTree), hash, hash2);
>>
>>  /* fprintf (stderr, "-> %s\n", *res); */
>>     if ( (fd = _XOpenFile (*res, O_RDONLY)) == -1)
>> --


it also breaks for dir="very log string that will overflow the buffer"
there is an asprintf(3) equivalent that would be more save and you can remove 
the Xmalloc.

re,
 wh




_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to