I think this OK.

The comments with the o--o did not do much for me though and found them a bit 
confusing but perhaps I need more coffee this morning ?

Also, not sure we need the @author tag but I think its usage varies in the 
workspace

Best
Lance
On Mar 19, 2014, at 7:10 PM, David Li wrote:

> Hi,
> 
> This is an update from Xerces for file impl/xpath/regex/TokenRange.java.  For 
> details, please refer to: https://bugs.openjdk.java.net/browse/JDK-8035577.
> 
> Webrevs: http://cr.openjdk.java.net/~joehw/jdk9/8035577/webrev/
> 
> Existing tests: JAXP SQE and unit tests passed.
> 
> Test cases added for typo fix in RangeToken.intersectRanges.  Code also 
> updated to fix a bug where regular expression intersection returns incorrect 
> value when first range ends later than second range.   Example below. Test 
> cases have been added to cover any scenarios that the code changes affect.
> 
> new RegularExpression("(?[b-d]&[a-r])"); -> returns [b-d] (Correct)
> new RegularExpression("(?[a-r]&[b-d])"); -> returns [b-de-r] (Incorrect)
> 
> Thanks,
> David
> 
> P.S. Notes on bug fixes.
> 1) Line 404 removal of while loop.
> This fixes a new bug where incorrect results are given when first range ends 
> later than second range.  In the old code we got
> (?[a-r]&[b-d]) -> returns [b-de-r]
> By removing the while loop, we get [b-d].
> This while loop looks like a copy-paste error from subtractRanges. In 
> subtractRanges we need to keep the leftover portion from the first range, but 
> this does not apply to intersection.
> 
> 2) Line 388, addition of src2 += 2;
> This code change affects anything of the form (?[a-r]&[b-eg-j]).  The code 
> execution is diagrammed below.
> o------------o  (src1)
>  o--o o--o     (src2)
> For the first match we get
> o------------o  (src1)
>  o--o          (src2)
> Next we want to run src2+=2 to get the second pair of endpoints (since the 
> first two endpoints are already used).  Notice how src1begin has been updated 
> to this.ranges[src1] = src2end+1, which is directly from the code.
>      o------o  (src1)
>       o--o     (src2)
> The src2+=2 statement was left out of the old code, and is added in this 
> webrev.  If we leave out the src2+=2 at line 388, on the next iteration of 
> the large while loop we will reach case "} else if (src2end < src1begin) {" 
> which also executes "src2+=2".  This means the correct final result is 
> generated, but on a later loop. We want to add the new code because it's 
> better to have all associated variable updated in the sameloop.  In addition, 
> all the other conditions have similar src1 or src2 updates.
> 

Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering 
1 Network Drive 
Burlington, MA 01803
lance.ander...@oracle.com

Reply via email to