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

John Gordon commented on MAPREDUCE-4368:
----------------------------------------

Good catch, Bikas.  Thank you.  Yes, this function in particular function would 
probably need a broader rewrite to handle all the escaping mechanisms and 
special characters on Linux.  For instance, a string with 
-Djava.library.path=/home/jgordon/hadoop\ lib;/usr/lib64 would also have 
problems with surrounding quotes, because the \ would be interpreted literally.
touch this\ file
is different from:
touch "this\ file"

In that case, the more ideal solution would be to not pass javaopts as one 
string, but as an array of options or a hash a-priori to improve the ability to 
reason about them at all layers in the stack.  Then we could have a check for 
non-escaped problem characters like ;|&\,whitespace,#,etc and quote escape the 
whole option only when we see those.
                
> TaskRunner fails to start jars when the java.library.path contains a quoted 
> path with embedded spaces
> -----------------------------------------------------------------------------------------------------
>
>                 Key: MAPREDUCE-4368
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-4368
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: tasktracker
>    Affects Versions: 1-win
>         Environment: on Windows: 
> set PATH=%PATH%;"C:\this memorable place".
>            Reporter: John Gordon
>              Labels: newbie, patch
>         Attachments: TaskRunner.patch
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> TaskRunner splits arguments by space before it adds them back to the vargs 
> list, so it loses all context of quote escaped strings with embedded spaces.  
> This gets fixed up later by wrapping all arguments with " -- so you get 
> something like java "-D<opt>=<value>".  This is problematic for paths with 
> embedded spaces, where we end up creating "-D<opt>=<first part" "last part>". 
>  To java, the jar being run is last part.  So with the environment above, you 
> will see "ClassNoDefFoundError: memorable" and the jar will fail to start.  
> In this particular case, we know that java.libarary.path contains paths and 
> the tests often use %PATH% to seed this, so the fix is to remove embedded 
> quotes in listed path elements because we know the aggregate will be quoted 
> when the JVM is started.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to