On Tue, 27 Aug 2024 23:54:08 GMT, Dean Long <dl...@openjdk.org> wrote:

>> If you try to accommodate arbitrary future use then every method in the VM 
>> would need to enforce every single precondition and invariant it expects 
>> "just in case" and that is not practical. Code can and does take advantage 
>> of the expected calling context, which here limits lengths to int (and 
>> typically  < 64K). The checked_cast serves to catch such misuses in my 
>> opinion.
>
>> If you try to accommodate arbitrary future use then every method in the VM 
>> would need to enforce every single precondition and invariant it expects 
>> "just in case" and that is not practical.
> 
> I'm basically arguing for Functional Testing here, or at least having some 
> invariants the would allow functional testing.  It may seem impractical to 
> retrofit existing code, but when we are changing the input from int to 
> size_t, that seems like the perfect time to enforce the new invariants.  If 
> we expect "len" to be <= INT_MAX instead of SIZE_MAX, something that is not 
> obvious from its type, then why not check that with an assert or at least 
> document it?

Note that I do already document the assumptions here in the general comment in 
utf8.hpp:

There is an additional assumption/expectation that our UTF8 API's are never 
dealing with
invalid UTF8, and more generally that all UTF8 sequences could form valid 
Strings.
Consequently the Unicode length of a UTF8 sequence is assumed to always be 
representable
by an int. 

the check_cast is then the assert that verifies that.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/20560#discussion_r1733751739

Reply via email to