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

Jens Geyer edited comment on THRIFT-5652 at 10/14/22 9:05 PM:
--------------------------------------------------------------

Implementation accepts both the curly-braced and the canonical form. Samples 
again in ConstantsDemo.thrift  

How the internal format is translated into a particular target language is a 
generator specific issue.


was (Author: jensg):
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)

Reply via email to