Closed
Bug 276103
Opened 21 years ago
Closed 21 years ago
Using substrings inside link() doesn't work
Categories
(Core :: JavaScript Engine, defect, P2)
Tracking
()
VERIFIED
FIXED
mozilla1.8alpha6
People
(Reporter: gianugo, Assigned: brendan)
Details
(Keywords: js1.5)
Attachments
(3 files, 1 obsolete file)
|
556 bytes,
text/html
|
Details | |
|
2.48 KB,
patch
|
brendan
:
review+
caillon
:
approval1.7.6-
|
Details | Diff | Splinter Review |
|
2.34 KB,
text/plain
|
Details |
Weird one. If you try to build a link using var.link(destination) where
"destination" comes from a substring operation, the originating (before the
substring) string is used as the link target. This happens *even* if you assign
the substring value to a different var. So:
function makeLink() {
var testString = "test|string";
var idx = testString.indexOf("|");
var link = testString.substring(0, idx);
var desc = testString.substring(idx + 1);
document.write(desc.link(link));
}
produces
<a href="test|string">string</a>
instead than the expected (and working on Safari/IE, both Mac and Win)
<a href="test">string</a>
Will attach an HTML test case
| Reporter | ||
Comment 1•21 years ago
|
||
| Reporter | ||
Comment 2•21 years ago
|
||
getting weirder. This works:
function makeLink() {
var testString = "test|string";
var idx = testString.indexOf("|");
var link = testString.substring(0, idx);
var desc = testString.substring(idx + 1);
alert(link);
document.write(desc.link(link));
}
So:
1. if you omit the alert, desc.link(link) = <a href="test|string">string</a>
2. if you use the alert, desc.link(link) = <a href="test">string</a>
How can an alert() fix the problem?
| Assignee | ||
Comment 3•21 years ago
|
||
See bug 276030 for a coincidence: on the cvs.mozilla.org trunk I have disabled
at compile time these old HTML string helper methods (link, anchor, etc.). Not
due to bugs, but in the hope that the lack of a de-jure standard meant that
other browsers didn't implement them. Fat chance!
When it rains, it pours -- I wonder why folks are playing with these old HTML
helpers now (this bug was introduced on 2001/10/25). Or perhaps this is code
being run in a Mozilla product for the first time.
Anyway, this is a jsstr.c bug where old code that assumed all JSStrings were
NUL-terminated ran into the dependent string change done years later to optimize
concatenation (see bug 56940). A dependent string shares a reference into
another string's buffer, so there is no NUL backstop -- but JS allows NULs in
strings, so the tagify static function in jsstr.c was always on thin ice using
js_strlen(param).
Gianugo, did you see this in Firefox 1.0?
At least there's a workaround: without the alert, you should be able to make the
dependent string convert to an immutable (independent, NUL-terminated) string by
using it to index into a property: var junk = {}; junk[link] = 42 (or similar).
Sorry about this bug, it's nine and a half years old.
/be
Assignee: general → brendan
Status: UNCONFIRMED → NEW
Ever confirmed: true
Keywords: js1.5
Priority: -- → P2
Version: Trunk → 1.7 Branch
| Reporter | ||
Comment 4•21 years ago
|
||
Brendan, yes, this is Firefox 1.0 (Mozilla/5.0 (Macintosh; U; PPC Mac OS X
Mach-O; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0). Tried on a number of other
Firefox/Mozilla combinations though...
Interesting workaround though, but I've already converted everything to good old
link building via string concatenation. Thanks anyway for your support, good to
know I have another way out (I'm working on other's code).
| Assignee | ||
Comment 5•21 years ago
|
||
If you have a lot of code that uses the HTML string helpers, attachment 169599 [details]
from bug 276030 should save having to expand the calls into string
concatenations all over the place.
This fix is good for 1.7.6 and any other active branches.
/be
| Assignee | ||
Updated•21 years ago
|
Attachment #169641 -
Flags: review?(shaver)
Attachment #169641 -
Flags: approval1.7.6?
| Assignee | ||
Comment 6•21 years ago
|
||
Non-minimal fix, more efficient, suggested by dbaron.
/be
| Assignee | ||
Updated•21 years ago
|
Attachment #169643 -
Flags: review?(shaver)
| Assignee | ||
Comment 7•21 years ago
|
||
Comment on attachment 169641 [details] [diff] [review]
fix
Requested approval too early -- sorry, stay tuned to this bug.
/be
Attachment #169641 -
Flags: approval1.7.6?
| Assignee | ||
Updated•21 years ago
|
Status: NEW → ASSIGNED
Flags: blocking1.7.6?
Target Milestone: --- → mozilla1.8alpha6
| Assignee | ||
Comment 8•21 years ago
|
||
Comment on attachment 169641 [details] [diff] [review]
fix
Never mind, the patch dbaron suggested is better all around. This is smaller
in source chars changed, but so what? It hides an OOM error, and flattens a
dependent string needlessly, compared to the 2nd patch.
/be
Attachment #169641 -
Attachment is obsolete: true
Attachment #169641 -
Flags: review?(shaver)
| Assignee | ||
Comment 9•21 years ago
|
||
Comment on attachment 169643 [details] [diff] [review]
alternate fix, larger but safe
r=shaver across the chronal barrier! (with a warning fix: the JSString *param
argument to tagify can't be a pointer to const struct, because JSSTRING_CHARS
calls js_GetDependentStringChars, which takes a mutable string).
/be
Attachment #169643 -
Flags: review?(shaver)
Attachment #169643 -
Flags: review+
Attachment #169643 -
Flags: approval1.7.6?
| Assignee | ||
Comment 10•21 years ago
|
||
Fixed, closing but keeping bug on branch approval radar.
/be
| Assignee | ||
Updated•21 years ago
|
Status: ASSIGNED → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Comment 11•21 years ago
|
||
Comment on attachment 169643 [details] [diff] [review]
alternate fix, larger but safe
a=caillon for 1.7.6. Please land this weekend.
Attachment #169643 -
Flags: approval1.7.6? → approval1.7.6+
Updated•21 years ago
|
Flags: blocking1.7.6? → blocking1.7.6+
Comment 12•21 years ago
|
||
Gianugo, with your permission this will go in the javascript test library.
| Reporter | ||
Comment 13•21 years ago
|
||
No problem at all, consider it officially contributed.
Comment 14•21 years ago
|
||
js1_5/Regress/regress-276103.js checked in.
Comment 15•21 years ago
|
||
Comment on attachment 169643 [details] [diff] [review]
alternate fix, larger but safe
This hasn't landed yet, so changing to minus.
Attachment #169643 -
Flags: approval1.7.6+ → approval1.7.6-
Updated•21 years ago
|
Flags: blocking1.7.6+ → blocking1.7.6-
Updated•21 years ago
|
Flags: testcase+
You need to log in
before you can comment on or make changes to this bug.
Description
•