Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chrome crash, "Aw, Snap!" error #1423

Closed
xfd opened this issue Jan 17, 2014 · 27 comments · Fixed by strukturag/spreed-webrtc#58
Closed

Chrome crash, "Aw, Snap!" error #1423

xfd opened this issue Jan 17, 2014 · 27 comments · Fixed by strukturag/spreed-webrtc#58
Labels

Comments

@xfd
Copy link

@xfd xfd commented Jan 17, 2014

Chrome version: 32.0.1700.77
moment.js version: 2.5.0
moment-timezone.js version: 0.0.3

Run below code in Chrome browser (multiple page refreshes could be required to reproduce error):

<!DOCTYPE html>
<html>
    <head>
        <script src="moment.js">
        </script>
        <script src="moment-timezone.js">
        </script>
        <script src="moment-timezone-data.js">
        </script>
    </head>
    <body>
        <script>
            "use strict";
            for(var i = 0; i < 100; i++) {
                moment(1405461600000);
                moment().tz("America/North_Dakota/Beulah");
            }
        </script>
    </body>
</html>

This has something to do with JS execution optimizations. If you change order of properties in moment(), makeMoment() function call to the same as in moment.utc() function:

{
    _useUTC : false,
    _isUTC : false,
    _l : lang,
    _i : input,
    _f : format,
    _strict : strict
}

problem is gone. I think this is bug in Chrome, but you can fix it easily in your library.

@ichernev
Copy link
Contributor

@ichernev ichernev commented Jan 17, 2014

You can report this with chrome too. Patches are welcome :)

@bblack
Copy link

@bblack bblack commented Jan 19, 2014

For what it's worth, I can confirm a similar intermittent error on Chrome 32.0.1700.77 that did not happen in any Chrome version prior. With moment.js 2.1.0, I can prevent the error in a similar way, by replacing the block

    moment = function (input, format, lang) {
        return makeMoment({
            _i : input,
            _f : format,
            _l : lang,
            _isUTC : false
        });
    };

with

    moment = function (input, format, lang) {
        var h = {};
        h._i = input;
        h._f = format;
        h._l = lang;
        h._isUTC = false;
        return makeMoment(h);
    };

@xfd have you reported this to the Chrome/Chromium/V8 projects?

@xfd
Copy link
Author

@xfd xfd commented Jan 20, 2014

@bblack I've only reported it via Chrome's "Report an issue…" form.

@alexions
Copy link

@alexions alexions commented Jan 20, 2014

Hello,

I would like to know when this fix will be released, and new builds will be available.
We use moment.js in our products (cs-cart.com) and want to fix the Chrome 32 bug as soon as possible, because it is very critical for our customers.

Thanks!

@lygaret
Copy link

@lygaret lygaret commented Jan 21, 2014

Borrowed the patch from @tatey, and we're back in service in production. Thanks!!!

@ichernev
Copy link
Contributor

@ichernev ichernev commented Jan 21, 2014

@alexions I'll try to make an earlier release later today. In the mean time you can use the patch in #1429.

@alexions
Copy link

@alexions alexions commented Jan 21, 2014

@ichernev Thanks a lot!

@ichernev
Copy link
Contributor

@ichernev ichernev commented Jan 22, 2014

@alexions Released 2.5.1

@tatey
Copy link
Contributor

@tatey tatey commented Jan 22, 2014

@xfd Do you have a link to the bug report? I can attach my crash ID to the report and reference it in #1429.

I've tried to isolate the issue without our production stack and haven't had any success. We use moment in a "widget" which gets injected into third party websites through an iframe.

@tybro0103
Copy link

@tybro0103 tybro0103 commented Jan 26, 2014

Geez this was hard to track down. The crash was so rare, and sometimes instead of crashing it would throw a stack overflow error, but the stack trace was not deep and never in the same place.

@niemyjski
Copy link

@niemyjski niemyjski commented Jan 27, 2014

Thank you so much!! I was trying to figure this out and then I noticed all the timer fired events coming from moment and then figured I'd look there.

@niemyjski
Copy link

@niemyjski niemyjski commented Jan 27, 2014

Did anyone report this to chrome as a bug? I think we should still commit it as a bug as it was pretty crazy to get a random tab crash.

@dansimpson
Copy link

@dansimpson dansimpson commented Jan 27, 2014

@niemyjski I agree, the patch fixes the issue here, but there is another underlying problem being masked. When reading the patch I wonder why the patch works. @tatey do you happen to know more about this or was it more of a trial by error thing?

@tatey
Copy link
Contributor

@tatey tatey commented Jan 28, 2014

It was trial by error and @xfd's comments.

I have a crash id, but I have nothing else to follow it up with.

It was affecting our widget in a partner's website (http://www.sydneyfestival.org.au/2014/Family/Band-of-Magicians/) which has since been fixed.

I tried to re-create the problem in a single document, but couldn't get Chrome v32 to crash. I think it's the combination of everything on that page.

The only thing left to do is to spin up a whole new environment and make it publicly accessible. I just don't have the capacity to do that at the moment.

I was really hoping other people might have been able to submit bug reports to the Chromium project instead.

On 28 Jan 2014, at 10:17 am, Dan Simpson notifications@github.com wrote:

@niemyjski I agree, the patch fixes the issue here, but there is another underlying problem being masked. When reading the patch I wonder why the patch works. @tatey do you happen to know more about this or was it more of a trial by error thing?


Reply to this email directly or view it on GitHub.

@dansimpson
Copy link

@dansimpson dansimpson commented Jan 28, 2014

Thanks @tatey. I wasn't sure which came first. I'll see about submitting an issue to the chrome project.

@dansimpson
Copy link

@dansimpson dansimpson commented Jan 28, 2014

@xfd can you package up your reproduction files or throw them in a repository? This way we have something to give that reproduces the error.

@niemyjski
Copy link

@niemyjski niemyjski commented Jan 28, 2014

I just wanted to let you all know that I think this still could be an issue. I just hit the Awe snap issue on staging (praying to god I don't see it again).

@xfd
Copy link
Author

@xfd xfd commented Jan 28, 2014

Files required to reproduce bug: https://dl.dropboxusercontent.com/u/68860725/chrome_v32_bug_reproduce.zip. It not always occurs at first time, refresh page multiple times. I've only reported bug by Chrome's built-in form, so I don't have id or link. Probably this is V8 JS optimization issue, so should be reported there.

@dansimpson
Copy link

@dansimpson dansimpson commented Jan 28, 2014

I submitted an issue to chromium. I'll update with the issue if it is made visible.

@dansimpson
Copy link

@dansimpson dansimpson commented Jan 28, 2014

Alright, it was considered a duplicate and merged with this issue: https://code.google.com/p/chromium/issues/detail?id=333594

@balnagy
Copy link

@balnagy balnagy commented Feb 10, 2014

You are awesome. Save my day! :) Thanks.

@niemyjski
Copy link

@niemyjski niemyjski commented Feb 17, 2014

I'm still seeing this crash with the latest version of chrome and momentjs.

@mjebrini
Copy link

@mjebrini mjebrini commented Feb 19, 2014

I face the same problem,
TypeError: Object function (input, format, lang, strict) {
var c;

    if (typeof(lang) === "boolean") {
        strict = lang;
        lang = undefined;
    }
    // object construction must be done this way.
    // https://github.com/moment/moment/issues/1423
    c = {};
    c._isAMomentObject = true;
    c._i = input;
    c._f = format;
    c._l = lang;
    c._strict = strict;
    c._isUTC = false;
    c._pf = defaultParsingFlags();

    return makeMoment(c);
} has no method 'format'

@ichernev
Copy link
Contributor

@ichernev ichernev commented Mar 12, 2014

@mjebrini you're trying to call moment.format() instead of moment().format()

@jniemin
Copy link

@jniemin jniemin commented May 6, 2016

I had this same crash with 2.13.0 version when using it through webpack. I wasn't able to pinpoint the exact reason for the crash. I'm importing the package through NPM and after calling some hundreds of time in loop moment.utc(0) I got Chrome 50 crashing (Firefox 45 and Safari 9.1 works correctly).

Also seems that if I just import moment in html using <script> and then using webpack
externals: { 'moment':'moment' } it works fine. Also if I removed all references to the moment.js from the page, it worked without crash, so it must be something related to how webpack/npm and work together.

@AStaroverov
Copy link

@AStaroverov AStaroverov commented Aug 22, 2016

Crashed in chrome 52
Use with webpack and react

@Ramizzzz
Copy link

@Ramizzzz Ramizzzz commented Dec 18, 2020

Anyone Tell how to solve the aw snap issue ? I'm using angular 7 project and python backend, whenever I hit API and waiting for response the page will be shown "aw sanp"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.