[ 
https://issues.apache.org/jira/browse/PROTON-892?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14705234#comment-14705234
 ] 

Alan Conway commented on PROTON-892:
------------------------------------

Thanks a lot Michael. I had to adjust a bit for changes in proton, I made 2 
actual changes to your solution:

I defined PNI_NID_MAX. The problem with -1L is it makes assumptions about the 
signedness and bit size of pni_nid_t far away from the definition. It is 
correct in the code as it is today, but if someone changed pni_nid_t to a 
signed type, or a type bigger than long (and note size_t is not  *guaranteed* 
to fit in a long on all platforms) it would create a subtle, rare, 
platform-specific bug.

I dropped the case where you grow by adding 1k and stuck to a simple "double 
till you hit the max". I don't see a reason to change algorithmic growth 
algorithm just because you passed 32k.

Thanks again!

> pn_data_t capacity does not grow above 32768 items
> --------------------------------------------------
>
>                 Key: PROTON-892
>                 URL: https://issues.apache.org/jira/browse/PROTON-892
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: proton-c
>    Affects Versions: 0.9, 0.9.1, 0.10
>            Reporter: Michael
>            Assignee: Alan Conway
>             Fix For: 0.10.1
>
>         Attachments: 0003-data-capacity.patch
>
>
> pn_data_grow() function looses half of the available data capacity.
> The following happens: when data overflows, pn_data_grow is invoked. It 
> increases data capacity 2 times and reallocates nodes array. Data capacity is 
> represented as uint16_t type and so when capacity reaches 32768 items, the 
> result of multiplication by 2 becomes 0. This makes realloc return null and 
> crashes the program.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to