Skip to content

Emit scrambles variables if passing 4+ parameters with a callback, in IE9. #112

Open
@mGuv

Description

@mGuv

Odd title but this is a very specific issue, it seems. I've only seen this happen in Internet Explorer 9.

If you emit four or more variables with the last parameter being a function. When the function is passed through, "asyncAngularify", it also causes the third parameter (index 2) to change in to the resulting function.

E.g.

angularSocket.emit("MyEvent", dataA, dataB, dataC, someCallback);

Will get passed to socket as:

emit("MyEvent", dataA, wrappedCallback, dataC, wrappedCallback);

I believe this is a crazy issue to do with IE9s interpretation of the function. The function is defined as:

emit: function (eventName, data, callback)

Yet these parameters are never used, however, it does do:

var callback = arguments[lastIndex];

The key part here being that callback has been declared twice. Once, as parameter 3 of the arguments array (function definition) and now once as the final parameter of the arguments. So when:

callback = asyncAngularify(socket, callback);

happens, I believe it overwrites both arguments[2] and arguments[length - 1]

The fix for me so far is just to remove the variables in the function definition. Other methods would be to rename the parameters so there are no conflicting ones.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions