On 10/10/2016 01:28 PM, Wilco Dijkstra wrote:
> Martin Liška <mli...@suse.cz> wrote:
>> On 10/07/2016 01:21 PM, Wilco Dijkstra wrote:
>>
>>> I believe target_char_cast is incorrect if the host/target chars are not 
>>> identical
>>> (depending on how constant strings are created there may be signed/unsigned
>>> mismatches too). I recently added target_char_cst_p to gimple-fold.c to 
>>> avoid
>>> char representation mismatches, so it would be better to use that instead.
>>
>> Thank you for the predicate, I'm going to use it.
>>
>> I have one additional question whether also c_getstr should be guarded
>> with a similar guard? Or is it always safe to grab a char* by 
>> TREE_STRING_POINTER
>> and use it by a host string functions (strcmp, ...)?
> 
> Yes I guess that one is incorrect too. I can't find the internal 
> implementation of tree strings,
> but it may well be that GCC just doesn't support any mismatches in 
> host/target character
> size. In any case an explicit check won't do any harm as it isn't possible to 
> use host string
> functions if there is a mismatch in character size.

I will dig in this situation. I'll build a cross-compiler which will have a 
different character size.

> 
> Another thing, what happens with:
> 
> memchr ("abc", 225, 1000000000);
> 
> It seems your new code will call memchr with the given size (and potentially 
> crash) rather
> than report the obvious bug and set a consistent return value that doesn't 
> rely on reading
> random memory on the host.

I asked Jakub about that on IRC already:

<marxin> Hi. Just thinking whether we should fold a case like __builtin_memchr 
("a", 'x', 2), which is ubsan?
<jakub> marxin: what do you mean by that?  That is NULL, without undefined 
behavior
<marxin> jakub: sry, s/2/3
<jakub> marxin: don't fold that in that case
<marxin> jakub: good, I thought that

It's an opportunity for a warning and as I talked to Martin Sebor, he's aware 
of this as an improvement
of his sprintf warnings he's currently working on.

Martin

> 
> Wilco
> 
> 
> 

Reply via email to