DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15285>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15285

RegexFunction.java: If Nth match not found -> the whole request is quietly cancelled 
(Patch included)

           Summary: RegexFunction.java: If Nth match not found -> the whole
                    request is quietly cancelled (Patch included)
           Product: JMeter
           Version: Nightly (Please specify date)
          Platform: All
        OS/Version: Other
            Status: NEW
          Severity: Minor
          Priority: Other
         Component: Main
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


There is a bug in Jmeter 1.8. The bug exist in CVS version too (11.12.2002 
17:55 UTC). 

The bug occurs if one uses regexfunction to form a request with the way that 
Nth match should be returned ("which match to use" -field). If there is no Nth 
match, but only N-1 matches the most, Jmeter quietly cancels the request 
without leaving any indication that something went wrong. 


the error is in file: 
/functions/org/apache/jmeter/functions/RegexFunction.java 

and in method "execute". (lines 125->) 

The code does not consider such a situation that there are matches but not Nth 
match. The "try - catch" catches only "NumberFormatExceptions", not for 
IndexOutOfBoundsException". "execute" method should return "defaultValue", but 
it does not. 

My suggestion is to add a "try - catch" clause around the "else" -branch as 
shown below. Compiles and works. I don't have (non-anonymous) CVS access, so I 
can't do it myself.

Regards, 

Jarno

[EMAIL PROTECTED]


------CVS Version 1.6  ------------------
try {
    int index = Integer.parseInt(valueIndex) - 1;
    MatchResult result = (MatchResult)collectAllMatches.get(index);
    return generateResult(result);
} catch(NumberFormatException e) {
    float ratio = Float.parseFloat(valueIndex);
    MatchResult result = (MatchResult)collectAllMatches.get(
    (int)(collectAllMatches.size() * ratio + .5) - 1);
    return generateResult(result);
}

---------- FIX --------------------

try {
    try {
        int index = Integer.parseInt(valueIndex) - 1;
        MatchResult result = (MatchResult)collectAllMatches.get(index);
        return generateResult(result);
    } catch(NumberFormatException e) {
        float ratio = Float.parseFloat(valueIndex);
        MatchResult result = (MatchResult)collectAllMatches.get((int)
(collectAllMatches.size() * ratio + .5) - 1);
        return generateResult(result);
    }
}  catch (IndexOutOfBoundsException e) {
    return defaultValue;
}  
--------------------------------

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to