Tom Whitten wrote:
> Keep in mind that assert() can be compiled out if NDEBUG is defined.  I
> don't think that this is done very often, however.
>
> I've seen some places in the code where there is an assert() followed by an
> abort().
>   
Yes, that will be the case here. - Steve

> tom
>
> Steve Peng writes:
>   
>> David,
>>
>> Ok I will go ahead assert in backend_switch_copy().  I will send out 
>> another increment webrev once it is ready.
>>
>> Thanks
>>
>> Steve
>>
>> David Bustos wrote:
>>     
>>> Quoth Steve Peng on Thu, Feb 14, 2008 at 10:58:14AM -0700:
>>>   
>>>       
>>>> David Bustos wrote:
>>>>     
>>>>         
>>>>> backend_switch() no longer fails with _TRUNCATED, so please remove it
>>>>> from repository_switch()'s comment.
>>>>>       
>>>>>           
>>>> Line 1172 in backend_switch_copy possibly can return _TRUNCATED error 
>>>> hence backend_switch can return the same
>>>> error.
>>>>     
>>>>         
>>> Not if you assert() that backend_switch_copy() doesn't fail with
>>> _TRUNCATED.  If it does, we'll abort and the caller of backend_switch()
>>> will never see the error.
>>>
>>>   
>>>       
>>>>>>> cmd/svc/configd/backend.c
>>>>>>>           
>>>>>>>               
>>>>> ...
>>>>>       
>>>>>           
>>>>>>>   1302: Shouldn't you assert() that this doesn't fail with _TRUNCATED
>>>>>>>     since you know that dst is much shorter than PATH_MAX?
>>>>>>>       
>>>>>>>           
>>>>>>>               
>>>>>> I can add that.
>>>>>>         
>>>>>>             
>>>>> Then you should also fix backend_switch()'s comment to say that it can
>>>>> return the error codes from backend_switch_copy() except for _TRUNCATED.
>>>>> Though I think it would be better to just list the errors outright.
>>>>>       
>>>>>           
>>>> Look into more I think I should back out assertion since strcat in 
>>>> backend_switch_copy can possibly fail with _TRUNCATE even
>>>> it may not happen but I like to be more cautious.
>>>>     
>>>>         
>>> No, we can prove that it can't happen.  It doesn't depend on the value
>>> of sw_back, it depends on REPOSITORY_DB, FAST_REPOSITORY_DB, PATH_MAX,
>>> and the code of backend_switch_copy(), all of which are either standard
>>> or are compiled into the binary.  It means that somebody changed one of
>>> those things in an uncorrelated way and is testing it.  Rather than
>>> passing an error up the stack which eventually results in a strange
>>> error message, you should abort() as soon as we know it's a programming
>>> error.  (Some would even argue that you could assert() when strlcat()
>>> fails in backend_switch_copy().)  This will make debugging easier and
>>> eliminates an error case for the calling code.
>>>
>>> If you want to make the assumptions more explicit, you could calculate
>>> how long dst has to be before backend_switch_copy() returns _TRUNCATED
>>> and document it in the comment.  Then you could add
>>> assert(strlen(dst) < /* computed number */) to backend_switch().  And
>>> you could even add a comment to the definition of REPOSITORY_DB and
>>> FAST_REPOSITORY_DB saying that it shouldn't be made any longer than your
>>> computed number.  I don't think it's worth it for such specialized code
>>> in the same file, though.
>>>
>>>
>>> David
>>>   
>>>       
>> _______________________________________________
>> smf-discuss mailing list
>> smf-discuss at opensolaris.org
>>     


Reply via email to