From d5f3bdc9855df07210ca2acfd1ce528b15dfc468 Mon Sep 17 00:00:00 2001 From: piers Date: Mon, 4 Aug 2008 20:21:46 +0000 Subject: [PATCH] MDL-10425 and MDL-12872 Firefox bugs String() handling on replace. enhanced rege xfor CMI data types. --- mod/scorm/api.php | 2 +- mod/scorm/datamodels/aicc.js.php | 8 ++++---- mod/scorm/datamodels/scorm_12.js.php | 14 ++++++-------- mod/scorm/datamodels/scorm_13.js.php | 12 ++++++------ 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/mod/scorm/api.php b/mod/scorm/api.php index d517b8bf59..0f59a67825 100644 --- a/mod/scorm/api.php +++ b/mod/scorm/api.php @@ -74,6 +74,6 @@ var errorCode = "0"; function underscore(str) { - str = str.replace(/.N/g,"."); + str = String(str).replace(/.N/g,"."); return str.replace(/\./g,"__"); } diff --git a/mod/scorm/datamodels/aicc.js.php b/mod/scorm/datamodels/aicc.js.php index dfebd349e2..7e122d6eb2 100644 --- a/mod/scorm/datamodels/aicc.js.php +++ b/mod/scorm/datamodels/aicc.js.php @@ -231,10 +231,10 @@ function AICCapi() { if (Initialized) { if (element !="") { expression = new RegExp(CMIIndex,'g'); - elementmodel = element.replace(expression,'.n.'); + elementmodel = String(element).replace(expression,'.n.'); if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") { if (eval('datamodel["'+elementmodel+'"].mod') != 'w') { - element = element.replace(expression, "_$1."); + element = String(element).replace(expression, "_$1."); elementIndexes = element.split('.'); subelement = 'cmi'; i = 1; @@ -285,7 +285,7 @@ function AICCapi() { if (Initialized) { if (element != "") { expression = new RegExp(CMIIndex,'g'); - elementmodel = element.replace(expression,'.n.'); + elementmodel = String(element).replace(expression,'.n.'); if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") { if (eval('datamodel["'+elementmodel+'"].mod') != 'r') { expression = new RegExp(eval('datamodel["'+elementmodel+'"].format')); @@ -481,7 +481,7 @@ function AICCapi() { } else { element = parent+'.'+property; expression = new RegExp(CMIIndex,'g'); - elementmodel = element.replace(expression,'.n.'); + elementmodel = String(element).replace(expression,'.n.'); if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") { if (eval('datamodel["'+elementmodel+'"].mod') != 'r') { elementstring = '&'+underscore(element)+'='+escape(data[property]); diff --git a/mod/scorm/datamodels/scorm_12.js.php b/mod/scorm/datamodels/scorm_12.js.php index 3ee58a6e31..fe0daf7653 100644 --- a/mod/scorm/datamodels/scorm_12.js.php +++ b/mod/scorm/datamodels/scorm_12.js.php @@ -16,10 +16,8 @@ // function SCORMapi1_2() { // Standard Data Type Definition - CMIString256 = '^.{0,255}$'; - CMIString4096 = '^.{0,4096}$'; - //CMIString256 = '^[\.|\\n|\\r]{0,255}$'; - //CMIString4096 = '^[\.|\\n|\\r]{0,4095}$'; + CMIString256 = '^[\\u0000-\\uffff]{0,255}$'; + CMIString4096 = '^[\\u0000-\\uffff]{0,4096}$'; CMITime = '^([0-2]{1}[0-9]{1}):([0-5]{1}[0-9]{1}):([0-5]{1}[0-9]{1})(\.[0-9]{1,2})?$'; CMITimespan = '^([0-9]{2,4}):([0-9]{2}):([0-9]{2})(\.[0-9]{1,2})?$'; CMIInteger = '^\\d+$'; @@ -223,10 +221,10 @@ function SCORMapi1_2() { if (Initialized) { if (element !="") { expression = new RegExp(CMIIndex,'g'); - elementmodel = element.replace(expression,'.n.'); + elementmodel = String(element).replace(expression,'.n.'); if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") { if (eval('datamodel["'+elementmodel+'"].mod') != 'w') { - element = element.replace(expression, "_$1."); + element = String(element).replace(expression, "_$1."); elementIndexes = element.split('.'); subelement = 'cmi'; i = 1; @@ -282,7 +280,7 @@ function SCORMapi1_2() { if (Initialized) { if (element != "") { expression = new RegExp(CMIIndex,'g'); - elementmodel = element.replace(expression,'.n.'); + elementmodel = String(element).replace(expression,'.n.'); if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") { if (eval('datamodel["'+elementmodel+'"].mod') != 'r') { expression = new RegExp(eval('datamodel["'+elementmodel+'"].format')); @@ -493,7 +491,7 @@ function SCORMapi1_2() { } else { element = parent+'.'+property; expression = new RegExp(CMIIndex,'g'); - elementmodel = element.replace(expression,'.n.'); + elementmodel = String(element).replace(expression,'.n.'); if (elementmodel != "cmi.core.session_time") { if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") { if (eval('datamodel["'+elementmodel+'"].mod') != 'r') { diff --git a/mod/scorm/datamodels/scorm_13.js.php b/mod/scorm/datamodels/scorm_13.js.php index c1f0e77e82..957a8864a9 100644 --- a/mod/scorm/datamodels/scorm_13.js.php +++ b/mod/scorm/datamodels/scorm_13.js.php @@ -330,12 +330,12 @@ function SCORMapi1_3() { if ((Initialized) && (!Terminated)) { if (element !="") { var expression = new RegExp(CMIIndex,'g'); - var elementmodel = element.replace(expression,'.n.'); + var elementmodel = String(element).replace(expression,'.n.'); if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") { if (eval('datamodel["'+elementmodel+'"].mod') != 'w') { - element = element.replace(/\.(\d+)\./, ".N$1."); + element = String(element).replace(/\.(\d+)\./, ".N$1."); element = element.replace(/\.(\d+)\./, ".N$1."); var elementIndexes = element.split('.'); @@ -429,7 +429,7 @@ function SCORMapi1_3() { if ((Initialized) && (!Terminated)) { if (element != "") { var expression = new RegExp(CMIIndex,'g'); - var elementmodel = element.replace(expression,'.n.'); + var elementmodel = String(element).replace(expression,'.n.'); if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") { if (eval('datamodel["'+elementmodel+'"].mod') != 'r') { if (eval('datamodel["'+elementmodel+'"].format') != 'CMIFeedback') { @@ -533,7 +533,7 @@ function SCORMapi1_3() { // Use cmi.interactions.n.type value to check the right dataelement format if (elementIndexes[elementIndexes.length-2] == eval(parentelement+'._count')) { - var interactiontype = eval(parentelement.replace('correct_responses','type')); + var interactiontype = eval(String(parentelement).replace('correct_responses','type')); if ((typeof correct_responses[interactiontype].limit == 'undefined') || (eval(parentelement+'._count') < correct_responses[interactiontype].limit)) { if (correct_responses[interactiontype].pre != '') { @@ -992,7 +992,7 @@ function SCORMapi1_3() { return element; } else { var expression = new RegExp(CMIIndex,'g'); - var elementmodel = element.replace(expression,'.n.'); + var elementmodel = String(element).replace(expression,'.n.'); if (typeof datamodel[elementmodel] != "undefined") { return elementmodel; } @@ -1061,7 +1061,7 @@ function SCORMapi1_3() { } else { var element = parent+'.'+property; var expression = new RegExp(CMIIndexStore,'g'); - var elementmodel = element.replace(expression,'.n.'); + var elementmodel = String(element).replace(expression,'.n.'); if ((typeof eval('datamodel["'+elementmodel+'"]')) != "undefined") { if (eval('datamodel["'+elementmodel+'"].mod') != 'r') { var elementstring = '&'+underscore(element)+'='+encodeURIComponent(data[property]); -- 2.39.5