Author: abartlet Date: 2006-08-15 02:39:38 +0000 (Tue, 15 Aug 2006) New Revision: 17548
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17548 Log: It is a good idea to commit the fix (from mkhl) before the test that shows the need for... Martin Kuhl writes: The ejs function `substitute_var' returns `undefined' when the first argument ends in a pattern that should be substituted. For that reason, the second assertion fails in the following test-case: ,---- | libinclude("base.js"); | | var obj = new Object(); | obj.FOO = "foo"; | obj.BAR = "bar"; | var str1 = "${FOO}:${BAR}"; | var str2 = "${FOO}:${BAR} "; // note the space after the brace | var sub1 = substitute_var(str1, obj); | var sub2 = substitute_var(str2, obj); | | assert(str1 + " " == str2); | assert(sub1 + " " == sub2); `---- The problem is that the function `split' returns a single-element array in both cases: a) the string to split doesn't contain the split pattern b) the string ends with the split pattern To work around this, the following patch tests this condition and returns `undefined' only if the string to split (`list[i]') really didn't contain a closing brace. Modified: branches/SAMBA_4_0/source/scripting/libjs/base.js Changeset: Modified: branches/SAMBA_4_0/source/scripting/libjs/base.js =================================================================== --- branches/SAMBA_4_0/source/scripting/libjs/base.js 2006-08-15 02:25:10 UTC (rev 17547) +++ branches/SAMBA_4_0/source/scripting/libjs/base.js 2006-08-15 02:39:38 UTC (rev 17548) @@ -72,7 +72,7 @@ var i; for (i=1;i<list.length;i++) { var list2 = split("}", list[i], 1); - if (list2.length < 2) { + if ((list2.length < 2) && (list2[0] + "}" != list[i])) { return undefined; } var key = list2[0];