moment / moment

Parse, validate, manipulate, and display dates in javascript.

Home Page:momentjs.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Chrome crash, "Aw, Snap!" error

xfd opened this issue · comments

commented

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.

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

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?

commented

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

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!

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

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

@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.

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.

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.

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.

@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?

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.

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

@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.

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).

commented

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.

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

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

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

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

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'

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

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.

Crashed in chrome 52
Use with webpack and react

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"