RFR(S): 8214854: JDWP: Unforseen output truncation in logging

Dmitry Chuyko dmitry.chuyko at bell-sw.com
Sat Mar 2 08:51:55 UTC 2019


Thank you for reviews. Pushed.

-Dmitry

On 3/2/19 2:28 AM, Chris Plummer wrote:
> +1
>
> thanks,
>
> Chris
>
> On 3/1/19 2:56 PM, David Holmes wrote:
>> Looks good.
>>
>> Thanks,
>> David
>>
>> On 2/03/2019 7:46 am, Dmitry Chuyko wrote:
>>> Ok. typedef part removed according to review comments (not related 
>>> to fix).
>>>
>>> Updated webrev: http://cr.openjdk.java.net/~dchuyko/8214854/webrev.01/
>>>
>>> -Dmitry
>>>
>>> On 3/1/19 10:07 PM, Chris Plummer wrote:
>>>> On 2/28/19 11:12 PM, Dmitry Chuyko wrote:
>>>>> On 3/1/19 6:36 AM, Chris Plummer wrote:
>>>>>> On 2/28/19 5:07 PM, David Holmes wrote:
>>>>>>> Hi Dmitry,
>>>>>>>
>>>>>>> On 1/03/2019 6:15 am, Dmitry Chuyko wrote:
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> Please review a small fix for GCC 8.x warning in 
>>>>>>>> log_messages.c. Buffer sizes for parts of timestamp string can 
>>>>>>>> be adjusted to not exceed maximum buffer size when combined, 
>>>>>>>> while being able to hold necessary information.
>>>>>>>>
>>>>>>>> webrev: http://cr.openjdk.java.net/~dchuyko/8214854/webrev.00/
>>>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8214854
>>>>>>>> testing: after the fix GCC 8 compiles working OpenJDK on Linux. 
>>>>>>>> Dev-submit job started.
>>>>>>>
>>>>>>> This looks good.
>>>>>>>
>>>>>>> One query:
>>>>>>>
>>>>>>>  51 typedef char timestamp_buffer[TIMESTAMP_SIZE];
>>>>>>>
>>>>>>> Is this needed so that the size of the buffer is known by gcc 
>>>>>>> inside get_time_stamp? (Generally I prefer to see explicitly 
>>>>>>> when an array is being stack allocated, not have it hidden 
>>>>>>> behind a typedef.)
>>>>>> This also caught my attention and then got me thinking on what 
>>>>>> basis is gcc producing the warning in the first place. The 
>>>>>> warning is:
>>>>>>
>>>>>>  src/jdk.jdwp.agent/share/native/libjdwp/log_messages.c:75:24: 
>>>>>> error: '%.3d' directive output may be truncated writing between 3 
>>>>>> and 11 bytes into a region of size between 0 and 80 
>>>>>> [-Werror=format-truncation=]
>>>>>>                     "%s.%.3d %s", timestamp_prefix,
>>>>>>                         ^~~~
>>>>>>
>>>>>> I think it deduced this by seeing that the call to 
>>>>>> get_time_stamp() is passing in a char[80] for the tbuf argument. 
>>>>>> It then also sees that the argument for the first %s is also a 
>>>>>> char[80] array, so is pointing out that this first %s might fill 
>>>>>> (or nearly fill) tbuf, not leaving room for the %.3d argument. If 
>>>>>> this is the case, there is no need for the timestamp_buffer 
>>>>>> typedef. The real fix was making timestamp_date_time and 
>>>>>> timestamp_timezone smaller so gcc doesn't think they can overflow 
>>>>>> tbuf.
>>>>>>
>>>>>> Chris
>>>>>
>>>>> Current signature of helper function is get_time_stamp(char *tbuf, 
>>>>> size_t ltbuf). If we drop typedef change, this function either 
>>>>> logically needs ltbuf parameter or it internally assumes it to be 
>>>>> somewhat (TIMESTAMP_SIZE+1).
>>>> Hi Dmitry,
>>>>
>>>> Ok, but that's unrelated to the compiler warning and not needed for 
>>>> the fix. Using a typedef hides the fact that we are dealing with a 
>>>> char* so makes the code less readable. I actually prefer the way it 
>>>> was with a char* and size_t arguments. My next preference would be:
>>>>
>>>>      get_time_stamp(char tbuf[MAXLEN_TIMESTAMP+1])
>>>>
>>>> Although I think it's also a bit odd. I don't recall seeing array 
>>>> sizes in function prototypes before.
>>>>
>>>> thanks,
>>>>
>>>> Chris
>>>>
>>>>> In first case we in general should care about arbitrary ltbuf 
>>>>> size. Like 5 or 2. In second case there are no static checks/hints 
>>>>> that we don't pass tbuf of diferent size. So I preferred to have 
>>>>> this information in the function signature and to use known 
>>>>> lengths of parts: get_time_stamp(timestamp_buffer tbuf).
>>>>>
>>>>> -Dmitry
>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>> David
>>>>>>>
>>>>>>>
>>>>>>>> -Dmitry
>>>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>
>


More information about the serviceability-dev mailing list