From 0608c759e2de9b08c91cfeaa2e7bffdc33feebd7 Mon Sep 17 00:00:00 2001 From: Mrugesh Mohapatra Date: Tue, 2 Feb 2016 23:23:09 +0530 Subject: [PATCH] Fix Range Error : Maximum Call Stack Size Exceeded This commit fixes the `capture` console.log, with an alternate logic to resolve the objects with correct scope. Refer the PR FreeCodeCamp/FreeCodeCamp#6681 discussion for details. Tested locally. Updated fix to resolve broken CI --- .../basic-javascript.json | 64 ++++++++++++++----- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/challenges/01-front-end-development-certification/basic-javascript.json b/challenges/01-front-end-development-certification/basic-javascript.json index 88bc964a20..b0415f9355 100644 --- a/challenges/01-front-end-development-certification/basic-javascript.json +++ b/challenges/01-front-end-development-certification/basic-javascript.json @@ -1831,16 +1831,22 @@ ], "tail": [ "var logOutput = \"\";", - "var oldLog = console.log;", + "var originalConsole = console", "function capture() {", + " var nativeLog = console.log;", " console.log = function (message) {", - " logOutput = message.trim();", - " oldLog.apply(console, arguments);", + " if(message && message.trim) logOutput = message.trim();", + " if(nativeLog.apply) {", + " nativeLog.apply(originalConsole, arguments);", + " } else {", + " var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');", + " nativeLog(nativeMsg);", + " }", " };", "}", "", "function uncapture() {", - " console.log = oldLog;", + " console.log = originalConsole.log;", "}", "", "if (typeof myFunction !== \"function\") { ", @@ -1891,16 +1897,22 @@ "releasedOn": "January 1, 2016", "head": [ "var logOutput = \"\";", - "var oldLog = console.log;", + "var originalConsole = console", "function capture() {", + " var nativeLog = console.log;", " console.log = function (message) {", - " logOutput = message + ''.trim();", - " oldLog.apply(console, arguments);", + " if(message) logOutput = JSON.stringify(message).trim();", + " if(nativeLog.apply) {", + " nativeLog.apply(originalConsole, arguments);", + " } else {", + " var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');", + " nativeLog(nativeMsg);", + " }", " };", "}", "", "function uncapture() {", - " console.log = oldLog;", + " console.log = originalConsole.log;", "}", "", "capture();" @@ -1950,16 +1962,22 @@ "releasedOn": "January 1, 2016", "head": [ "var logOutput = \"\";", - "var oldLog = console.log;", + "var originalConsole = console", "function capture() {", + " var nativeLog = console.log;", " console.log = function (message) {", " logOutput = message;", - " oldLog.apply(console, arguments);", + " if(nativeLog.apply) {", + " nativeLog.apply(originalConsole, arguments);", + " } else {", + " var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');", + " nativeLog(nativeMsg);", + " }", " };", "}", "", "function uncapture() {", - " console.log = oldLog;", + " console.log = originalConsole.log;", "}", "var oopsGlobal;", "capture();" @@ -2018,16 +2036,22 @@ "releasedOn": "January 1, 2016", "head": [ "var logOutput = \"\";", - "var oldLog = console.log;", + "var originalConsole = console", "function capture() {", + " var nativeLog = console.log;", " console.log = function (message) {", " logOutput = message;", - " oldLog.apply(console, arguments);", + " if(nativeLog.apply) {", + " nativeLog.apply(originalConsole, arguments);", + " } else {", + " var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');", + " nativeLog(nativeMsg);", + " }", " };", "}", "", "function uncapture() {", - " console.log = oldLog;", + " console.log = originalConsole.log;", "}", "" ], @@ -2192,16 +2216,22 @@ "releasedOn": "January 1, 2016", "head": [ "var logOutput = [];", - "var oldLog = console.log;", + "var originalConsole = console", "function capture() {", + " var nativeLog = console.log;", " console.log = function (message) {", " logOutput.push(message);", - " oldLog.apply(console, arguments);", + " if(nativeLog.apply) {", + " nativeLog.apply(originalConsole, arguments);", + " } else {", + " var nativeMsg = Array.prototype.slice.apply(arguments).join(' ');", + " nativeLog(nativeMsg);", + " }", " };", "}", "", "function uncapture() {", - " console.log = oldLog;", + " console.log = originalConsole.log;", "}", "", "capture();"