EcmaError.getLineSource() returns 0x0 characters.

VERIFIED FIXED in 1.5R4

Status

Rhino
Core
--
minor
VERIFIED FIXED
16 years ago
14 years ago

People

(Reporter: Morten Moeller, Assigned: Norris Boyd)

Tracking

Details

Attachments

(2 attachments)

(Reporter)

Description

16 years ago
The function EcmaError.getLineSource() returns 0x0 ascii characters if the 
syntax error happened on a line that doesnt have a end of line before the 
script ends (last line of the code that doesnt have a newline in the end).

For example, the script "illegal javascript syntax" will return "illegal 
javascript syntax[][][][][][][][][]" where [] is ascii 0x0.

---- Little code showing the problem ----
import org.mozilla.javascript.*;
import java.io.*;

public class EcmaError {
    public static void main(String args[]) 
        throws JavaScriptException, IOException
    {
        Context cx = Context.enter();
        Scriptable scope = cx.initStandardObjects(null);
        String s = "\njavascript syntax error";  // A script with syntax error 
and no newline
        try {
        Object result = cx.evaluateString(scope, s, "<cmd>", 1, null);

        } catch (EcmaError e) {
            e.printStackTrace();
            for (int i = 0 ; i < e.getLineSource().length() ; i++ )
                System.out.print(" " + (int)(e.getLineSource().charAt(i)));  
            System.out.println("\nline is : \"" + e.getLineSource() + "\" 
(length of line = " + e.getLineSource().length() + ")");
        }
        
        Context.exit();
    }
}

---- Run result ---
106 97 118 97 115 99 114 105 112 116 32 115 121 110 116 97 120 32 101 114 114 
111 114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
line is : "javascript syntax error" (length of line = 254)

Notice the string is 254 characters long and have a lot of 0x0 ascii chars in 
the end. Sounds like a end of buffer problem.

Comment 1

16 years ago
Created attachment 91521 [details]
Test java code as an attachment (save it as ErrorTest.java)

The test should print PASSED if getLineSource returns proper string

Comment 2

16 years ago
Created attachment 91522 [details] [diff] [review]
Patch including the fix among other things

I committed the patch which is big due to removal of startString/getString as
TokenStream uses own buffer.

Comment 3

16 years ago
Fixed: it would be nice if Rhino will implement the line property of the error
object to match SM so the test case can be written in JS...
Status: NEW → RESOLVED
Last Resolved: 16 years ago
Resolution: --- → FIXED

Comment 4

16 years ago
Verified FIXED. Before the patch, the above testcase failed as follows:

FAILED! e.getLineSource() does not match 'javascript syntax error':
javascript syntax 
error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0
0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0
0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00


After the patch: 

PASSED
Status: RESOLVED → VERIFIED

Comment 5

14 years ago
Targeting as resolved against 1.5R4
Target Milestone: --- → 1.5R4
You need to log in before you can comment on or make changes to this bug.