Closed
Bug 280671
Opened 20 years ago
Closed 19 years ago
getting an ArrayIndexOutOfBoundException while trying to access the default Element in a HTML select list, without having an object selected as default
Categories
(Rhino Graveyard :: Core, defect)
Rhino Graveyard
Core
Tracking
(Not tracked)
RESOLVED
INVALID
People
(Reporter: fritz, Assigned: igor)
Details
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.54 [en] Build Identifier: httpunit/1.6 On a Website with the following JavaScript code "document.myForm.card. options[document.myForm.card.selectedIndex].value" and with no default selected option in the corresponding HTML - select, you get -1 as a result of document. myForm.card.selectedIndex. You then try to access document.myForm.card.options[- 1].value. While JavaScript the effect is, that the -1 is replaced by a 0 and then the result of value is the first element in the list, in Java you get an ArrayIndexOutOfBoundsException. Reproducible: Always Steps to Reproduce: 1.Parse the Purchase page of www.ryanair.com with Rhino and HTTPUnit. 2. 3. Actual Results: I got an ArrayIndexOutOfBoundsException Expected Results: It should have taken the first Element of the List.
| Reporter | ||
Comment 1•20 years ago
|
||
It can be fixed, by changing the Method "public static Object
getObjectElem(Scriptable obj, Object elem, Context cx)", and altering the
following:
Original Code:
if (s == null) {
int index = lastIndexResult(cx);
result = ScriptableObject.getProperty(obj, index);
}
Fixed Code:
if (s == null) {
int index = lastIndexResult(cx);
if (index==-1)
index=0;
result = ScriptableObject.getProperty(obj, index);
}| Assignee | ||
Comment 2•20 years ago
|
||
Marking as invalid: if it is necessary to deal with such behaviour to support the special treatment of -1 in a browser-specific world please override Scriptable.get(String property, Scriptable) and check for -1 in property.
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → INVALID
| Reporter | ||
Comment 3•20 years ago
|
||
Just noticing, I forgot to add, that the change has to be made in the Class
org.mozilla.javascript.ScriptRuntime ... was a bit late yesterday, sorry :)
To be more specific, here is the old Version of the Method:
public static Object getObjectElem(Scriptable obj, Object elem,
Context cx)
{
if (obj instanceof XMLObject) {
XMLObject xmlObject = (XMLObject)obj;
return xmlObject.ecmaGet(cx, elem);
}
Object result;
String s = toStringIdOrIndex(cx, elem);
if (s == null) {
int index = lastIndexResult(cx);
result = ScriptableObject.getProperty(obj, index);
} else {
result = ScriptableObject.getProperty(obj, s);
}
if (result == Scriptable.NOT_FOUND) {
result = Undefined.instance;
}
return result;
}
This should be the new version:
public static Object getObjectElem(Scriptable obj, Object elem,
Context cx)
{
if (obj instanceof XMLObject) {
XMLObject xmlObject = (XMLObject)obj;
return xmlObject.ecmaGet(cx, elem);
}
Object result;
String s = toStringIdOrIndex(cx, elem);
if (s == null) {
int index = lastIndexResult(cx);
if (index==-1)
index=0;
result = ScriptableObject.getProperty(obj, index);
} else {
result = ScriptableObject.getProperty(obj, s);
}
if (result == Scriptable.NOT_FOUND) {
result = Undefined.instance;
}
return result;
}
Status: RESOLVED → REOPENED
Resolution: INVALID → ---
| Assignee | ||
Comment 4•19 years ago
|
||
(In reply to comment #3) > Just noticing, I forgot to add, that the change has to be made in the Class > org.mozilla.javascript.ScriptRuntime ... was a bit late yesterday, sorry :) This change breaks ECMA Standard and as I wrote should be done in the custom host objects.
Status: REOPENED → RESOLVED
Closed: 20 years ago → 19 years ago
Resolution: --- → INVALID
| Reporter | ||
Comment 5•19 years ago
|
||
Could you point me to the explicit ECMA Standard you are talking about? To be explicit, we had to patch the js.jar to fix this problem, which is also a bit annoying, as the BEA Webserver for example has the complete js.jar inside it's weblogic.jar and thus with the normal classpath, the fix is ignored. I don't really see where I can fix this in a custom host object.
| Assignee | ||
Comment 6•19 years ago
|
||
(In reply to comment #5) > Could you point me to the explicit ECMA Standard you are talking about? See http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf , 11.2.1 Property Accessors which does not define any special treatment for "-1" and the method in Rhino you suggested to change corresponds to this action. > > To be explicit, we had to patch the js.jar to fix this problem, which is also a > bit annoying, as the BEA Webserver for example has the complete js.jar inside > it's weblogic.jar and thus with the normal classpath, the fix is ignored. > > I don't really see where I can fix this in a custom host object. Just override Scriptable.get(int index, Scriptable start) in yous host object to call Scriptable.get(0, start) when -1 was not found. See Rhino docs and Google for details.
You need to log in
before you can comment on or make changes to this bug.
Description
•