Will-Lo opened a new pull request, #3688:
URL: https://github.com/apache/gobblin/pull/3688

   … fix bug in Hive registration where classes can escape type casts
   
   Dear Gobblin maintainers,
   
   Please accept this PR. I understand that it will not be reviewed until I 
have checked off all the steps below!
   
   
   ### JIRA
   - [ ] My PR addresses the following [Gobblin 
JIRA](https://issues.apache.org/jira/browse/GOBBLIN/) issues and references 
them in the PR title. For example, "[GOBBLIN-XXX] My Gobblin PR"
       - https://issues.apache.org/jira/browse/GOBBLIN-1826
   
   
   ### Description
   - [ ] Here are some details about my PR, including screenshots (if 
applicable):
   After the Guava 20 upgrade, there is a bug in the Hive registration code.
   When setting table properties, `HiveTable` calls this function in 
`HiveRegistrationUnit` to set Properties
   ```
     protected static <T> Optional<T> populateField(State state, String key, 
TypeToken<T> token) {
   ```
   Since it returns a type generic Optional, it is possible to assign an 
incorrect class to a field. So an Optional<Long> can actually be holding a 
String value and causes a Class cast exception.
   
   What was happening is that in Guava 20, `isAssignableFrom` is deprecated 
from the `TypeToken` class. Instead, the following code pattern was used:
   
   ```
         } else if (new TypeToken<Long>() 
{}.getRawType().isAssignableFrom(token.getClass())) {
   ```
   However, in this case getRawType() would have returned java.Lang.Long, so it 
would not be assignable to the token class but rather the base class.
   
   To avoid all this headache, and to also properly validate the List<String> 
token type, we should be using `.isSupertypeOf()` in lieu of 
`isAssignableFrom()`.
   
   This time also wrote a unit test to validate the runtime behavior of each 
type.
   
   
   ### Tests
   - [x] My PR adds the following unit tests __OR__ does not need testing for 
this extremely good reason:
   Unit tests
   
   ### Commits
   - [ ] My commits all reference JIRA issues in their subject lines, and I 
have squashed multiple commits if they address the same issue. In addition, my 
commits follow the guidelines from "[How to write a good git commit 
message](http://chris.beams.io/posts/git-commit/)":
       1. Subject is separated from body by a blank line
       2. Subject is limited to 50 characters
       3. Subject does not end with a period
       4. Subject uses the imperative mood ("add", not "adding")
       5. Body wraps at 72 characters
       6. Body explains "what" and "why", not "how"
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to