[
https://issues.apache.org/jira/browse/THRIFT-5652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17617969#comment-17617969
]
Jens Geyer commented on THRIFT-5652:
------------------------------------
Implementation accepts both the curly-braced and the canonical form. Samples
again in ConstantsDemo.thrift
> IDL uuid literals can be improved
> ----------------------------------
>
> Key: THRIFT-5652
> URL: https://issues.apache.org/jira/browse/THRIFT-5652
> Project: Thrift
> Issue Type: Sub-task
> Components: Compiler (General)
> Reporter: Jens Geyer
> Assignee: Jens Geyer
> Priority: Major
> Time Spent: 40m
> Remaining Estimate: 0h
>
> [~fishywang] wrote:
> in the example this is a valid UUId string (in the 8-4-4-4-12 canonical
> form), but what if it is invalid?
> looking at the current compiler code (via `git grep -i uuid` under
> `compiler/cpp/src`) I don't see any actual parsing of the uuid string on the
> compiler level (please let me know if I missed it), which means from the
> compiler's point of view, it just has this string literal that's supposed to
> be an uuid, and it's the language library's responsibility to convert that
> from string to uuid. there's also no way to gracefully handle
> errors/exceptions for thrift generated language code at const
> definitions/default value definitions, which means if the string cannot be
> converted to uuid, it must be a runtime exception/panic/etc.
> compare these 2 examples:
> const string FOO = 123
> vs.
> const uuid FOO = "123"
> the first thrift file will cause a compiler error, while the second will
> cause a runtime error instead.
> so here are two options/approaches I can think of for now:
> 1. the compiler should actually parse the uuid string (using boost:uuid or
> something), reject any invalid uuid literals, and feed the bytes to generated
> code (vs. the string via language libraries' parse function)
> 2. we accept that for invalid uuid literals we'll have runtime
> exceptions/panics
> but even if we accept runtime exceptions, there's still an issue with
> "lenient imparity" between the language libraries. for example, all language
> libaries should support the canonical 8-4-4-4-12 form, as that's what we
> defined as the form to be used by TJSONProtocol. but some language libraries
> can be more lenient than others, e.g. some might also accept
> {8-4-4-4-12}
> form, some might accept urn:uuid:8-4-4-4-12 form, some might accept 32-hex
> form. so when someone put one of the non-8-4-4-4-12 form literal in thrift
> file, some generated language code will have runtime exceptions and some
> won't. this can lead to bugs (e.g. someone created a thrift file and tested
> it in one language and it works, but it breaks for another language when
> someone else tries to use this same thrift file).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)