All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Narebski <jnareb@gmail.com>
To: Stephen Boyd <bebarino@gmail.com>
Cc: git@vger.kernel.org
Subject: [PATCH] gitweb.js: Harden setting blamed commit info in incremental blame
Date: Wed, 25 Nov 2009 01:45:15 +0100	[thread overview]
Message-ID: <200911250145.16472.jnareb@gmail.com> (raw)
In-Reply-To: <200911211556.52175.jnareb@gmail.com>

On Sat, 21 Nov 2009, Jakub Narebski wrote:
> On Sat, 21 Nov 2009, Jakub Narebski wrote:
> 
> > * Testing it with IE8 (Internet Explorer 8.0.6001.18702) page loading stops
> >   at 0%, at the very beginning on startBlame() function
> > 
> >   IE8 shows that it finds the following errors:
> > 
> >   * "firstChild is null or not an object"
> >     line: 565, char:4
> > 
> >       a_sha1.firstChild.data = commit.sha1.substr(0, 8);
> > 
> >     It might be caused by the fact that firstChild for this case should be
> >     text node containing of pure whitespace:
> >        <a href=""> </a>
> >     Perhaps IE8 simplifies it in "compatibility view" mode
> 
> This bug (be it in gitweb.js or in IE8) is fixed by the following patch:
> 
> -- 8< --
> diff --git i/gitweb/gitweb.js w/gitweb/gitweb.js
> index 200ec5a..c1e425c 100644
> --- i/gitweb/gitweb.js
> +++ w/gitweb/gitweb.js
> @@ -562,7 +562,12 @@ function handleLine(commit, group) {
>  			td_sha1.rowSpan = group.numlines;
>  
>  			a_sha1.href = projectUrl + 'a=commit;h=' + commit.sha1;
> -			a_sha1.firstChild.data = commit.sha1.substr(0, 8);
> +			if (a_sha1.firstChild) {
> +				a_sha1.firstChild.data = commit.sha1.substr(0, 8);
> +			} else {
> +				a_sha1.appendChild(
> +					document.createTextNode(commit.sha1.substr(0, 8)));
> +			}
>  			if (group.numlines >= 2) {
>  				var fragment = document.createDocumentFragment();
>  				var br   = document.createElement("br");
> -- >8 --

Below the same patch is in the form of a proper commit; although the title
(subject) of this commit could be better...

> >  * "Unspecified error" (twice)
> >    line: 777, char:2
> > 
> >      if (xhr.readyState === 3 && xhr.status !== 200) {
> >      	return;
> >      }
> > 
> >    I don't know what might be the source of error here; I suspect that the
> >    error position mentioned by IE8 is bogus.
> 
> But I have no idea how to fix this.  "Unspecified error" isn't very 
> helpful...

Debugging this is serious PITA.  After fix below it appears that this bug
is some intermittent bug, depending on XMLHttpRequest timing.  It more
often than not (at least when I tried to debug it using build-in IE8
debugger) works correctly for the folowing files: README, GIT-VERSION-GEN,
revision.c (once even it did fail when first running for given file, and
then running correctly when reloading from debugger; fun it is not).

It does consistently fail for gitweb/gitweb.perl... but when I tried
to debug it IE8 would hang up when trying to use debugger (with around
600MB available RAM).  Perhaps somebody else would have more luck...

-- >8 --
Subject: [PATCH] gitweb.js: Harden setting blamed commit info in incremental blame

Internet Explorer 8 stops at beginning of blame filling
with the following bug
  "firstChild is null or not an object"
at this line
  a_sha1.firstChild.data = commit.sha1.substr(0, 8);

It is (probably) caused by the fact that while a_sha1 element,
which looks like this
  <a href=""> </a>
has firstChild which is text node containing only whitespace (single
space character) in other web browsers (Firefox 3.5, Opera 10,
Google Chrome 3.0), IE8 simplifies DOM, removing trailing/leading
whitespace.

Protect against this bug by creating text element if it does not
exist.

Found-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
 gitweb/gitweb.js |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/gitweb/gitweb.js b/gitweb/gitweb.js
index 200ec5a..c1e425c 100644
--- a/gitweb/gitweb.js
+++ b/gitweb/gitweb.js
@@ -562,7 +562,12 @@ function handleLine(commit, group) {
 			td_sha1.rowSpan = group.numlines;
 
 			a_sha1.href = projectUrl + 'a=commit;h=' + commit.sha1;
-			a_sha1.firstChild.data = commit.sha1.substr(0, 8);
+			if (a_sha1.firstChild) {
+				a_sha1.firstChild.data = commit.sha1.substr(0, 8);
+			} else {
+				a_sha1.appendChild(
+					document.createTextNode(commit.sha1.substr(0, 8)));
+			}
 			if (group.numlines >= 2) {
 				var fragment = document.createDocumentFragment();
 				var br   = document.createElement("br");
-- 
1.6.5.3

  reply	other threads:[~2009-11-25  0:45 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-19 19:44 [PATCH 0/2] jn/gitweb-blame fixes Stephen Boyd
2009-11-19 19:44 ` [PATCH 1/2] gitweb.js: fix null object exception in initials calculation Stephen Boyd
2009-11-19 21:40   ` Jakub Narebski
2009-11-19 22:48     ` Stephen Boyd
2009-11-19 19:44 ` [PATCH 2/2] gitweb.js: use unicode encoding for nbsp instead of html entity Stephen Boyd
2009-11-19 23:00   ` Jakub Narebski
2009-11-20  1:00     ` Stephen Boyd
2009-11-25  3:51   ` [PATCHv2 2/2] gitweb.js: fix padLeftStr() and its usage Stephen Boyd
2009-11-19 23:05 ` [PATCH 0/2] jn/gitweb-blame fixes Jakub Narebski
2009-11-20  1:00   ` Stephen Boyd
2009-11-20  4:05     ` Stephen Boyd
2009-11-21  0:32       ` Jakub Narebski
2009-11-21 14:56         ` Jakub Narebski
2009-11-25  0:45           ` Jakub Narebski [this message]
2009-11-25  1:01             ` [PATCH] gitweb.js: Harden setting blamed commit info in incremental blame Nanako Shiraishi
2009-11-25  1:13               ` Jakub Narebski
2009-11-25  4:01             ` Stephen Boyd
2009-11-25 14:36               ` Jakub Narebski
2009-11-25 20:55                 ` Jakub Narebski
2009-11-25 21:39                   ` Junio C Hamano
2009-11-25 23:28                     ` Jakub Narebski
2009-11-26  0:34                       ` Junio C Hamano
2009-11-26  0:59                         ` Jakub Narebski
2009-11-26 20:12                           ` [RFC/PATCH] gitweb: Make linking to actions requiring JavaScript a feature Jakub Narebski
2009-11-26 20:34                             ` Junio C Hamano
2009-11-26 21:24                               ` Jakub Narebski
2009-11-27  2:39                                 ` Junio C Hamano
2009-11-27 15:41                                   ` Jakub Narebski
2009-11-27 18:29                                     ` Junio C Hamano
2009-12-01  1:18                                       ` Junio C Hamano
2009-12-01 16:51                                         ` Jakub Narebski
2009-12-01 16:52                                           ` [PATCH 1/2] " Jakub Narebski
2009-12-01 16:54                                           ` [PATCH 2/2] gitweb: Add link to other blame implementation in blame views Jakub Narebski
2009-12-07  1:04                 ` [PATCH] gitweb.js: Harden setting blamed commit info in incremental blame Stephen Boyd
2009-12-07  1:19                   ` Stephen Boyd
2009-12-08 16:29                     ` PATCH/RFC] gitweb.js: Workaround for IE8 bug Jakub Narebski
2009-12-08 21:56                       ` Stephen Boyd
2009-12-08 22:24                         ` Jakub Narebski
2009-12-08 22:32                         ` Jakub Narebski
2009-12-09  0:08                           ` Stephen Boyd
2009-11-23  4:52         ` [PATCH 0/2] jn/gitweb-blame fixes Stephen Boyd

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200911250145.16472.jnareb@gmail.com \
    --to=jnareb@gmail.com \
    --cc=bebarino@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.