RFR: 8067951: System.loadLibrary cannot find library when path contains quoted entry
Ivan Gerasimov
ivan.gerasimov at oracle.com
Tue Jan 6 21:13:27 UTC 2015
And here's the update:
http://cr.openjdk.java.net/~igerasim/8067951/6/webrev/
As you suggested, the psCount is calculated in the first loop along the way.
Another change is that a quotation mark is used as the new path separator.
I also thought it's better to add a short comment, as now it may look
confusing at a first glance.
Sincerely yours,
Ivan
On 06.01.2015 21:33, Xueming Shen wrote:
> Hi Ivan,
>
> Yes, it looks better and should run faster as it doesn't need to worry
> about quote
> in second loop. I was a little hesitated when suggested to replace the
> ps with 0,
> though I'm pretty much sure a \u0000 should never be a legal character
> in a
> windows' path :-)
>
> Anyone can think about any possibility of having an embedded \0
> character in path?
>
> Nitpick:
>
> the "posCount" probably can be calculated in the "quote handling" loop ?
>
> if (ClassloaderHelper.allowQuotedPathElements ....) {
> ...
> if (ch == ps) { ch = '\0'; psCount++; }
> buf[bufLen++] = ch;
> ...
> } else {
> for (int i = ldPath.indexOf(ps); i >=0 ...) {
> }
> }
>
> otherwise, it looks fine for me.
>
> -Sherman
>
> On 01/06/2015 05:49 AM, Ivan Gerasimov wrote:
>> Hi Sherman!
>>
>> I took your suggestion and rewrote the method to moved the logic,
>> which removes the quotes to the top.
>> I think the code became cleaner, so thank you for suggestion!
>>
>> Here's the updated webrev:
>> http://cr.openjdk.java.net/~igerasim/8067951/5/webrev/
>>
>> Sincerely yours,
>> Ivan
>>
>>
>> On 06.01.2015 0:12, Xueming Shen wrote:
>>> On 01/05/2015 12:41 PM, Ivan Gerasimov wrote:
>>>> Thanks Sherman!
>>>>
>>>> On 05.01.2015 22:10, Xueming Shen wrote:
>>>>>
>>>>> Just wonder if we really need that "inQuotes" logic here? A
>>>>> straightforward approach might
>>>>> be "every time you have a quote, skip everything until you hit
>>>>> another one, when counting,
>>>>> or copy everything into the buffer until hit another one, when
>>>>> copying" ?
>>>>>
>>>> I agree it would work, but, in my opinion, it would be a bit more
>>>> complicated.
>>>> The counting loop would look something like this:
>>>> ------------------------------------
>>>> outerLoop: for (int i = 0; i < ldLen; ++i) {
>>>> char ch = ldPath.charAt(i);
>>>> if (mayBeQuoted && ch == '\"') {
>>>> thereAreQuotes = true;
>>>> for (++i; i < ldLen; ++i) {
>>>> if (ldPath.charAt(i) == '\"') {
>>>> continue outerLoop;
>>>> }
>>>> }
>>>> break; // unpaired quote
>>>> } else if (ch == ps) {
>>>> psCount++;
>>>> }
>>>> }
>>>> ------------------------------------
>>>> which is 3 lines longer, comparing to the loop with inQuotes flag.
>>>>
>>>
>>> It does not seem like we are doing anything special for "unpaired
>>> quote" (just ignore it?),
>>> if that is the case, you probably don't need to do anything for it,
>>> the code could be
>>> something like
>>>
>>> for (int i = 0; i < ldLen; ++i) {
>>> char ch = ldPath.charAt(i);
>>> if (mayBeQuoted && ch == '\"') {
>>> thereAreQuotes = true;
>>> while (++i < ldLen && ldPath.charAt(i) != '\"') {}
>>> } else if (ch == ps) {
>>> psCount++;
>>> }
>>> }
>>>
>>> I have not tried to debug the code though :-) Just an opinion here.
>>>
>>> -Sherman
>>>
>>>
>>
>
>
>
More information about the core-libs-dev
mailing list