<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -75,7 +75,7 @@ var l = YAHOO.lang,
      * @static
      * @private
      */
-    _UNSAFE  = /^[\],:{}\s]*$/,
+    _UNSAFE  = /[^\],:{}\s]/,
 
 
 /* Variables used by stringify */
@@ -201,7 +201,7 @@ function _prepare(s) {
 
 function _isSafe(str) {
     return l.isString(str) &amp;&amp;
-            _UNSAFE.test(str.replace(_ESCAPES,'@').
+            !_UNSAFE.test(str.replace(_ESCAPES,'@').
                              replace(_VALUES,']').
                              replace(_BRACKETS,''));
 }</diff>
      <filename>build/json/json-debug.js</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-(function(){var l=YAHOO.lang,isFunction=l.isFunction,isObject=l.isObject,isArray=l.isArray,_toStr=Object.prototype.toString,Native=(YAHOO.env.ua.caja?window:this).JSON,_UNICODE_EXCEPTIONS=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_ESCAPES=/\\(?:[&quot;\\\/bfnrt]|u[0-9a-fA-F]{4})/g,_VALUES=/&quot;[^&quot;\\\n\r]*&quot;|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,_BRACKETS=/(?:^|:|,)(?:\s*\[)+/g,_UNSAFE=/^[\],:{}\s]*$/,_SPECIAL_CHARS=/[\\\&quot;\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_CHARS={&quot;\b&quot;:&quot;\\b&quot;,&quot;\t&quot;:&quot;\\t&quot;,&quot;\n&quot;:&quot;\\n&quot;,&quot;\f&quot;:&quot;\\f&quot;,&quot;\r&quot;:&quot;\\r&quot;,'&quot;':'\\&quot;',&quot;\\&quot;:&quot;\\\\&quot;},UNDEFINED=&quot;undefined&quot;,OBJECT=&quot;object&quot;,NULL=&quot;null&quot;,STRING=&quot;string&quot;,NUMBER=&quot;number&quot;,BOOLEAN=&quot;boolean&quot;,DATE=&quot;date&quot;,_allowable={&quot;undefined&quot;:UNDEFINED,&quot;string&quot;:STRING,&quot;[object String]&quot;:STRING,&quot;number&quot;:NUMBER,&quot;[object Number]&quot;:NUMBER,&quot;boolean&quot;:BOOLEAN,&quot;[object Boolean]&quot;:BOOLEAN,&quot;[object Date]&quot;:DATE,&quot;[object RegExp]&quot;:OBJECT},EMPTY=&quot;&quot;,OPEN_O=&quot;{&quot;,CLOSE_O=&quot;}&quot;,OPEN_A=&quot;[&quot;,CLOSE_A=&quot;]&quot;,COMMA=&quot;,&quot;,COMMA_CR=&quot;,\n&quot;,CR=&quot;\n&quot;,COLON=&quot;:&quot;,COLON_SP=&quot;: &quot;,QUOTE='&quot;';Native=_toStr.call(Native)===&quot;[object JSON]&quot;&amp;&amp;Native;function _char(c){if(!_CHARS[c]){_CHARS[c]=&quot;\\u&quot;+(&quot;0000&quot;+(+(c.charCodeAt(0))).toString(16)).slice(-4);}return _CHARS[c];}function _revive(data,reviver){var walk=function(o,key){var k,v,value=o[key];if(value&amp;&amp;typeof value===&quot;object&quot;){for(k in value){if(l.hasOwnProperty(value,k)){v=walk(value,k);if(v===undefined){delete value[k];}else{value[k]=v;}}}}return reviver.call(o,key,value);};return typeof reviver===&quot;function&quot;?walk({&quot;&quot;:data},&quot;&quot;):data;}function _prepare(s){return s.replace(_UNICODE_EXCEPTIONS,_char);}function _isSafe(str){return l.isString(str)&amp;&amp;_UNSAFE.test(str.replace(_ESCAPES,&quot;@&quot;).replace(_VALUES,&quot;]&quot;).replace(_BRACKETS,&quot;&quot;));}function _parse(s,reviver){s=_prepare(s);if(_isSafe(s)){return _revive(eval(&quot;(&quot;+s+&quot;)&quot;),reviver);}throw new SyntaxError(&quot;JSON.parse&quot;);}function _type(o){var t=typeof o;return _allowable[t]||_allowable[_toStr.call(o)]||(t===OBJECT?(o?OBJECT:NULL):UNDEFINED);}function _string(s){return QUOTE+s.replace(_SPECIAL_CHARS,_char)+QUOTE;}function _indent(s,space){return s.replace(/^/gm,space);}function _stringify(o,w,space){if(o===undefined){return undefined;}var replacer=isFunction(w)?w:null,format=_toStr.call(space).match(/String|Number/)||[],_date=YAHOO.lang.JSON.dateToString,stack=[],tmp,i,len;if(replacer||!isArray(w)){w=undefined;}if(w){tmp={};for(i=0,len=w.length;i&lt;len;++i){tmp[w[i]]=true;}w=tmp;}space=format[0]===&quot;Number&quot;?new Array(Math.min(Math.max(0,space),10)+1).join(&quot; &quot;):(space||EMPTY).slice(0,10);function _serialize(h,key){var value=h[key],t=_type(value),a=[],colon=space?COLON_SP:COLON,arr,i,keys,k,v;if(isObject(value)&amp;&amp;isFunction(value.toJSON)){value=value.toJSON(key);}else{if(t===DATE){value=_date(value);}}if(isFunction(replacer)){value=replacer.call(h,key,value);}if(value!==h[key]){t=_type(value);}switch(t){case DATE:case OBJECT:break;case STRING:return _string(value);case NUMBER:return isFinite(value)?value+EMPTY:NULL;case BOOLEAN:return value+EMPTY;case NULL:return NULL;default:return undefined;}for(i=stack.length-1;i&gt;=0;--i){if(stack[i]===value){throw new Error(&quot;JSON.stringify. Cyclical reference&quot;);}}arr=isArray(value);stack.push(value);if(arr){for(i=value.length-1;i&gt;=0;--i){a[i]=_serialize(value,i)||NULL;}}else{keys=w||value;i=0;for(k in keys){if(keys.hasOwnProperty(k)){v=_serialize(value,k);if(v){a[i++]=_string(k)+colon+v;}}}}stack.pop();if(space&amp;&amp;a.length){return arr?OPEN_A+CR+_indent(a.join(COMMA_CR),space)+CR+CLOSE_A:OPEN_O+CR+_indent(a.join(COMMA_CR),space)+CR+CLOSE_O;}else{return arr?OPEN_A+a.join(COMMA)+CLOSE_A:OPEN_O+a.join(COMMA)+CLOSE_O;}}return _serialize({&quot;&quot;:o},&quot;&quot;);}YAHOO.lang.JSON={useNativeParse:!!Native,useNativeStringify:!!Native,isSafe:function(s){return _isSafe(_prepare(s));},parse:function(s,reviver){return Native&amp;&amp;YAHOO.lang.JSON.useNativeParse?Native.parse(s,reviver):_parse(s,reviver);},stringify:function(o,w,space){return Native&amp;&amp;YAHOO.lang.JSON.useNativeStringify?Native.stringify(o,w,space):_stringify(o,w,space);},dateToString:function(d){function _zeroPad(v){return v&lt;10?&quot;0&quot;+v:v;}return d.getUTCFullYear()+&quot;-&quot;+_zeroPad(d.getUTCMonth()+1)+&quot;-&quot;+_zeroPad(d.getUTCDate())+&quot;T&quot;+_zeroPad(d.getUTCHours())+COLON+_zeroPad(d.getUTCMinutes())+COLON+_zeroPad(d.getUTCSeconds())+&quot;Z&quot;;},stringToDate:function(str){var m=str.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{3}))?Z$/);if(m){var d=new Date();d.setUTCFullYear(m[1],m[2]-1,m[3]);d.setUTCHours(m[4],m[5],m[6],(m[7]||0));return d;}return str;}};YAHOO.lang.JSON.isValid=YAHOO.lang.JSON.isSafe;})();YAHOO.register(&quot;json&quot;,YAHOO.lang.JSON,{version:&quot;@VERSION@&quot;,build:&quot;@BUILD@&quot;});
\ No newline at end of file
+(function(){var l=YAHOO.lang,isFunction=l.isFunction,isObject=l.isObject,isArray=l.isArray,_toStr=Object.prototype.toString,Native=(YAHOO.env.ua.caja?window:this).JSON,_UNICODE_EXCEPTIONS=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_ESCAPES=/\\(?:[&quot;\\\/bfnrt]|u[0-9a-fA-F]{4})/g,_VALUES=/&quot;[^&quot;\\\n\r]*&quot;|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,_BRACKETS=/(?:^|:|,)(?:\s*\[)+/g,_UNSAFE=/[^\],:{}\s]/,_SPECIAL_CHARS=/[\\\&quot;\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_CHARS={&quot;\b&quot;:&quot;\\b&quot;,&quot;\t&quot;:&quot;\\t&quot;,&quot;\n&quot;:&quot;\\n&quot;,&quot;\f&quot;:&quot;\\f&quot;,&quot;\r&quot;:&quot;\\r&quot;,'&quot;':'\\&quot;',&quot;\\&quot;:&quot;\\\\&quot;},UNDEFINED=&quot;undefined&quot;,OBJECT=&quot;object&quot;,NULL=&quot;null&quot;,STRING=&quot;string&quot;,NUMBER=&quot;number&quot;,BOOLEAN=&quot;boolean&quot;,DATE=&quot;date&quot;,_allowable={&quot;undefined&quot;:UNDEFINED,&quot;string&quot;:STRING,&quot;[object String]&quot;:STRING,&quot;number&quot;:NUMBER,&quot;[object Number]&quot;:NUMBER,&quot;boolean&quot;:BOOLEAN,&quot;[object Boolean]&quot;:BOOLEAN,&quot;[object Date]&quot;:DATE,&quot;[object RegExp]&quot;:OBJECT},EMPTY=&quot;&quot;,OPEN_O=&quot;{&quot;,CLOSE_O=&quot;}&quot;,OPEN_A=&quot;[&quot;,CLOSE_A=&quot;]&quot;,COMMA=&quot;,&quot;,COMMA_CR=&quot;,\n&quot;,CR=&quot;\n&quot;,COLON=&quot;:&quot;,COLON_SP=&quot;: &quot;,QUOTE='&quot;';Native=_toStr.call(Native)===&quot;[object JSON]&quot;&amp;&amp;Native;function _char(c){if(!_CHARS[c]){_CHARS[c]=&quot;\\u&quot;+(&quot;0000&quot;+(+(c.charCodeAt(0))).toString(16)).slice(-4);}return _CHARS[c];}function _revive(data,reviver){var walk=function(o,key){var k,v,value=o[key];if(value&amp;&amp;typeof value===&quot;object&quot;){for(k in value){if(l.hasOwnProperty(value,k)){v=walk(value,k);if(v===undefined){delete value[k];}else{value[k]=v;}}}}return reviver.call(o,key,value);};return typeof reviver===&quot;function&quot;?walk({&quot;&quot;:data},&quot;&quot;):data;}function _prepare(s){return s.replace(_UNICODE_EXCEPTIONS,_char);}function _isSafe(str){return l.isString(str)&amp;&amp;!_UNSAFE.test(str.replace(_ESCAPES,&quot;@&quot;).replace(_VALUES,&quot;]&quot;).replace(_BRACKETS,&quot;&quot;));}function _parse(s,reviver){s=_prepare(s);if(_isSafe(s)){return _revive(eval(&quot;(&quot;+s+&quot;)&quot;),reviver);}throw new SyntaxError(&quot;JSON.parse&quot;);}function _type(o){var t=typeof o;return _allowable[t]||_allowable[_toStr.call(o)]||(t===OBJECT?(o?OBJECT:NULL):UNDEFINED);}function _string(s){return QUOTE+s.replace(_SPECIAL_CHARS,_char)+QUOTE;}function _indent(s,space){return s.replace(/^/gm,space);}function _stringify(o,w,space){if(o===undefined){return undefined;}var replacer=isFunction(w)?w:null,format=_toStr.call(space).match(/String|Number/)||[],_date=YAHOO.lang.JSON.dateToString,stack=[],tmp,i,len;if(replacer||!isArray(w)){w=undefined;}if(w){tmp={};for(i=0,len=w.length;i&lt;len;++i){tmp[w[i]]=true;}w=tmp;}space=format[0]===&quot;Number&quot;?new Array(Math.min(Math.max(0,space),10)+1).join(&quot; &quot;):(space||EMPTY).slice(0,10);function _serialize(h,key){var value=h[key],t=_type(value),a=[],colon=space?COLON_SP:COLON,arr,i,keys,k,v;if(isObject(value)&amp;&amp;isFunction(value.toJSON)){value=value.toJSON(key);}else{if(t===DATE){value=_date(value);}}if(isFunction(replacer)){value=replacer.call(h,key,value);}if(value!==h[key]){t=_type(value);}switch(t){case DATE:case OBJECT:break;case STRING:return _string(value);case NUMBER:return isFinite(value)?value+EMPTY:NULL;case BOOLEAN:return value+EMPTY;case NULL:return NULL;default:return undefined;}for(i=stack.length-1;i&gt;=0;--i){if(stack[i]===value){throw new Error(&quot;JSON.stringify. Cyclical reference&quot;);}}arr=isArray(value);stack.push(value);if(arr){for(i=value.length-1;i&gt;=0;--i){a[i]=_serialize(value,i)||NULL;}}else{keys=w||value;i=0;for(k in keys){if(keys.hasOwnProperty(k)){v=_serialize(value,k);if(v){a[i++]=_string(k)+colon+v;}}}}stack.pop();if(space&amp;&amp;a.length){return arr?OPEN_A+CR+_indent(a.join(COMMA_CR),space)+CR+CLOSE_A:OPEN_O+CR+_indent(a.join(COMMA_CR),space)+CR+CLOSE_O;}else{return arr?OPEN_A+a.join(COMMA)+CLOSE_A:OPEN_O+a.join(COMMA)+CLOSE_O;}}return _serialize({&quot;&quot;:o},&quot;&quot;);}YAHOO.lang.JSON={useNativeParse:!!Native,useNativeStringify:!!Native,isSafe:function(s){return _isSafe(_prepare(s));},parse:function(s,reviver){return Native&amp;&amp;YAHOO.lang.JSON.useNativeParse?Native.parse(s,reviver):_parse(s,reviver);},stringify:function(o,w,space){return Native&amp;&amp;YAHOO.lang.JSON.useNativeStringify?Native.stringify(o,w,space):_stringify(o,w,space);},dateToString:function(d){function _zeroPad(v){return v&lt;10?&quot;0&quot;+v:v;}return d.getUTCFullYear()+&quot;-&quot;+_zeroPad(d.getUTCMonth()+1)+&quot;-&quot;+_zeroPad(d.getUTCDate())+&quot;T&quot;+_zeroPad(d.getUTCHours())+COLON+_zeroPad(d.getUTCMinutes())+COLON+_zeroPad(d.getUTCSeconds())+&quot;Z&quot;;},stringToDate:function(str){var m=str.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{3}))?Z$/);if(m){var d=new Date();d.setUTCFullYear(m[1],m[2]-1,m[3]);d.setUTCHours(m[4],m[5],m[6],(m[7]||0));return d;}return str;}};YAHOO.lang.JSON.isValid=YAHOO.lang.JSON.isSafe;})();YAHOO.register(&quot;json&quot;,YAHOO.lang.JSON,{version:&quot;@VERSION@&quot;,build:&quot;@BUILD@&quot;});
\ No newline at end of file</diff>
      <filename>build/json/json-min.js</filename>
    </modified>
    <modified>
      <diff>@@ -75,7 +75,7 @@ var l = YAHOO.lang,
      * @static
      * @private
      */
-    _UNSAFE  = /^[\],:{}\s]*$/,
+    _UNSAFE  = /[^\],:{}\s]/,
 
 
 /* Variables used by stringify */
@@ -201,7 +201,7 @@ function _prepare(s) {
 
 function _isSafe(str) {
     return l.isString(str) &amp;&amp;
-            _UNSAFE.test(str.replace(_ESCAPES,'@').
+            !_UNSAFE.test(str.replace(_ESCAPES,'@').
                              replace(_VALUES,']').
                              replace(_BRACKETS,''));
 }</diff>
      <filename>build/json/json.js</filename>
    </modified>
    <modified>
      <diff>@@ -75,7 +75,7 @@ var l = YAHOO.lang,
      * @static
      * @private
      */
-    _UNSAFE  = /^[\],:{}\s]*$/,
+    _UNSAFE  = /[^\],:{}\s]/,
 
 
 /* Variables used by stringify */
@@ -201,7 +201,7 @@ function _prepare(s) {
 
 function _isSafe(str) {
     return l.isString(str) &amp;&amp;
-            _UNSAFE.test(str.replace(_ESCAPES,'@').
+            !_UNSAFE.test(str.replace(_ESCAPES,'@').
                              replace(_VALUES,']').
                              replace(_BRACKETS,''));
 }</diff>
      <filename>src/json/js/JSON.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ed608737306ba86a82418a5fd4175c2a46d725b8</id>
    </parent>
  </parents>
  <author>
    <name>Luke Smith</name>
    <login></login>
    <email>lsmith@yahoo-inc.com</email>
  </author>
  <url>http://github.com/yui/yui2/commit/db30632d94d6041ee86a74b4cc7fa8d3bf2a6993</url>
  <id>db30632d94d6041ee86a74b4cc7fa8d3bf2a6993</id>
  <committed-date>2009-11-30T23:33:10-08:00</committed-date>
  <authored-date>2009-11-30T23:33:10-08:00</authored-date>
  <message>Updating _UNSAFE regex to be a more appropriate name.  Previously, it was doing a confirmation that the string ONLY contained SAFE characters.  Now it does a test for any UNSAFE characters.  _isSafe's use was also appropriately negated.</message>
  <tree>21ad1ee965bd903688ae5912fffc0a9bf90aff02</tree>
  <committer>
    <name>Luke Smith</name>
    <login></login>
    <email>lsmith@yahoo-inc.com</email>
  </committer>
</commit>
