<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Skypher &#187; Safari</title>
	<atom:link href="http://skypher.com/index.php/category/browsers/safari/feed/" rel="self" type="application/rss+xml" />
	<link>http://skypher.com</link>
	<description>The blog for absolutely nothing!</description>
	<lastBuildDate>Sat, 25 Feb 2012 11:27:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>JavaScript 1K poptart cat</title>
		<link>http://skypher.com/index.php/2011/05/05/javascript-1k-poptart-cat/</link>
		<comments>http://skypher.com/index.php/2011/05/05/javascript-1k-poptart-cat/#comments</comments>
		<pubDate>Thu, 05 May 2011 11:29:04 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[1k]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Funny]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=678</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p>I wrote another 1K JavaScript demo: <a href="http://skypher.com/SkyLined/demo/1K/poptartcat/">a 1k version of poptart cat</a>. See <a href="http://knowyourmeme.com/memes/nyan-cat-pop-tart-cat">this site</a> for more information about <a href="http://www.prguitarman.com/index.php?id=348">this meme</a>.</p>
<p><iframe style="width:420px; height: 420px; overflow: hidden; border: 0px;" src="http://skypher.com/SkyLined/demo/1K/poptartcat/"></iframe></p>
<p>Minimization tricks include:</p>
<ul>
<li>storing all sprites in a string by encoding each pixel in a sprite in 2 bits and storing 6 bits in each character. Each 2 bit chunk can have one of these values: 0=CR/lF (end of line/start of next line in sprite), 1=transparent (do not draw but move to next pixel), 2 = color 1, 3 = color 2. The colors are chosen from a palette, which is a string containing a number of RGB colors encoded in 3 hex chars (&#8216;fff&#8217;=white, &#8217;000&#8242;=black, &#8216;f00&#8242;=red, etc&#8230;). Each sprite has an associated palette based on the number of the sprite. Most sprites use one of two palettes: a one color palette (&#8216;fff&#8217;) for the background stars) or a two color palette (&#8217;999000&#8242;) for the cat&#8217;s face, paws and tail. A few other palettes are used for the poptart.</li>
<li>storing all sprite maps (meaning which sprites to draw where for each frame) in an array of 6 strings, one for each frame, by encoding each position and sprite number in 3 bits. The background stars are not included; their vertical position is based on their number, by multiplying the number of each star by a certain value. Their horizontal position is based on time, by multiplying the time by a certain value modulus the width of the image and adding a &#8220;random&#8221; value using the value of a different character from the sprites string for each star.</li>
<li>drawing squares instead of sprites to fill larger regions, as sprites need a lot more bytes to store when they get bigger then code to draw a single square does.
<li>using one function for two purposes: to draw a specific sprite at a specific location using a specific palette on the canvas, or to draw a square at a specific location, with specific dimensions and a specific color on the canvas. The function will draw a sprite if there are only 4 arguments provided and a square if there are 5.</li>
<li>using a bit of math to offset multiple sprites based on which frame is being drawn and adding sprites to the sprite. This is done to have the individual sprite maps for each frame contain the same information as much as possible, which makes them easier to compress.
</ul>
<p>I assumed it would be easy to code this one in 1K, but it turned out that it was pretty hard to minimize my code.</p>
<ul>
<li>I started with a large file that draw only the (animated) cat. This wasn&#8217;t optimized in any way: it used one big sprite for each frame, with each pixel being stored as byte containing a value 0-8, representing an index into a palette.</li>
<li>I then cut the cat into smaller individual sprites that I could reuse between frames (eg. the face is always the same, just at a different location). I stored a sprite mapping, meaning which sprite to draw where for each frame. I stored all this information in a string using values between 0-36 encoded using &#8216;[char] = [value].toString(36)&#8221; and read using &#8220;[value] = parseInt([char], 36)&#8221;.</li>
<li>I chose to give each sprite only two colors + transparent (3 values), so I can store each pixel in 2 bits (4 values) and use the unused value to signal &#8216;end of line&#8217; and using &#8216;end of line&#8217; twice for &#8216;end of sprite&#8217;. This meant I could store the entire sprite as 2 bit values. I encoded 3 of these 2 bit values per byte using &#8220;[char] = String.fromCharCode([values]+offset)&#8221; and red them using &#8220;[values] = [char].charCodeAt(0)-offset&#8221;.</li>
<li>I stored the values in the sprite maps as 3 bit values and encoded 2 of these 3 bit values per byte as well.</li>
<li>I wrote code that choses an &#8216;offset&#8217; to use in encoding sprites/sprite maps that caused the resulting string to contain as many of the same bytes as the code, which allows better compression.</li>
<li>At this point I was down to ~1.2K compressed. By reusing code for two purposes (eg. the &#8216;f&#8217; function) and rearranging/rewriting code to have it contain as many repeated strings as possible to allow better compression, I as able to get it down to ~1.01K.</li>
<li>Finally, I optimized my png compressor code to work together with the poptart cat code; eg. do not use &#8216;eval&#8217; to run the decompressed code, which then uses setTimeout to start the animation, but use &#8216;setTimeout&#8217; directly. This allowed me to squeeze everything into 1K.</li>
</ul>
<p>Because manually editing 2/3 bit values stored in 8 bit characters + offset is impractical, and because some of the values where calculated rather than hand-picked. I wrote  my development code to generate the final code and data automatically. This means I have a somewhat documented, readable version of the <a href="http://skypher.com/SkyLined/demo/1K/poptartcat/1knyan6.html">test container HTML</a> and the actual <a href="http://skypher.com/SkyLined/demo/1K/poptartcat/1knyan6.js">JavaScript</a> code. The test container will load the code, which will show the animation slowed down to 1 frame per second and output the final code below the animation. The final code is what I pumped through my to-be-released <a href="http://code.google.com/p/jssfx/">JsSfx</a> png compressor.</p>
<p>Afterwards, I realized that there are a few ways in which I could have improved on the code by doing a few things differently:</p>
<ul>
<li>Save data as unicode strings; this allows storing not 6 bits per byte, but (effectively) 16 per 2 bytes. This could reduce the size of the data by about 128 bytes, but would use more bytes to store the non-unicode characters outside of the strings.</li>
<li>Save each entry for each sprite map in a separate string, meaning store the x coordinates in one string, the y coordinates in another and the sprite number in a third. This should result in data that can be compressed better.</li>
<li>Use scaling for sprites to be able to draw the background, rainbow and body of poptart cat using sprites as well instead of separate code to draw squares. This would use less bytes than having code to draw the cat using both sprites and squares.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2011/05/05/javascript-1k-poptart-cat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Mandelbrot fractal rendering engine</title>
		<link>http://skypher.com/index.php/2011/01/13/javascript-mandelbrot-fractal-rendering-engine/</link>
		<comments>http://skypher.com/index.php/2011/01/13/javascript-mandelbrot-fractal-rendering-engine/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 00:33:59 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=668</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve put a few pieces of JavaScript together to create an interactive Mandelbrot fractal rendering engine <a href="http://skypher.com/SkyLined/demo/FractalZoomer/Mandel.html">here</a>. You can zoom into any area and adjust the number of iterations.</p>
<p>Suggestions and comments are appreciated; I have a few ideas of my own, such as allowing you to link to specific zoom settings, but I&#8217;m not sure when I&#8217;ll have time to add them.</p>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2011/01/13/javascript-mandelbrot-fractal-rendering-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Merry Christmas and a Happy New Year!</title>
		<link>http://skypher.com/index.php/2010/12/22/merry-christmas-and-a-happy-new-year/</link>
		<comments>http://skypher.com/index.php/2010/12/22/merry-christmas-and-a-happy-new-year/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 17:11:54 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[Chrome]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=656</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p>In case you don&#8217;t get my card: Merry Christmas and a Happy New Year, JavaScript style:<br />
<a href="http://skypher.com/SkyLined/demo/PerlinSimplexNoiseSnow/snow.html">http://skypher.com/SkyLined/demo/PerlinSimplexNoiseSnow/snow.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2010/12/22/merry-christmas-and-a-happy-new-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Perlin flames source</title>
		<link>http://skypher.com/index.php/2010/11/30/javascript-perlin-flames-source/</link>
		<comments>http://skypher.com/index.php/2010/11/30/javascript-perlin-flames-source/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 15:01:40 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[1k]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=642</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p>Many people have asked me for the uncompressed source of my <a href="http://skypher.com/index.php/2010/11/28/perlin-flames/">Perlin flames script</a>. At first I though about keeping it private, so people would have to reverse engineer the compressed code. After all, reverse engineering is how I learned the majority of what I know about programming today. But I realized that not everybody may have time to waste on such efforts when I wanted to have a copy of the original source of <a href="http://www.p01.org/releases/WOLF1K/wolf1k.js">WOLF1k</a> and couldn&#8217;t be bothered to decode it myself. So, I&#8217;ve made the uncompressed source available <a href="http://skypher.com/SkyLined/demo/PerlinFlames/p4.js">here</a>. This is the source after I manually optimized it for size and it doesn&#8217;t have any useful inline documentation: I found it much easier to memorize what each part of 1k of script does than continuously update documentation as I wrote it.</p>
<p>I still believe it is a good exercise to extract the source from the encoded version, as you learn a lot more that way, but I&#8217;ll leave that choose to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2010/11/30/javascript-perlin-flames-source/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apple QuickTime memory corruption when loading BMP file</title>
		<link>http://skypher.com/index.php/2010/04/12/apple-quicktime-memory-corruption-when-loading-bmp-file/</link>
		<comments>http://skypher.com/index.php/2010/04/12/apple-quicktime-memory-corruption-when-loading-bmp-file/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 11:53:01 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[PoC]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=455</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://support.apple.com/kb/HT4104">http://support.apple.com/kb/HT4104</a>:<br />
CVE-ID: CVE-2010-0536</p>
<p>Impact: Opening a maliciously crafted BMP image may lead to an unexpected application termination or arbitrary code execution</p>
<p>Description: A memory corruption issue exists in the handling of BMP images. Opening a maliciously crafted BMP image may lead to an unexpected application termination or arbitrary code execution. This update addresses the issue by performing additional validation of BMP images.</p>
<p>More details here:<br />
<a href="http://code.google.com/p/skylined/issues/detail?id=11">http://code.google.com/p/skylined/issues/detail?id=11</a></p>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2010/04/12/apple-quicktime-memory-corruption-when-loading-bmp-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cross browser parallel asynchronous XMLHttpRequests with timeout.</title>
		<link>http://skypher.com/index.php/2009/09/29/cross-browser-parallel-asynchronous-xmlhttprequests-with-timeout/</link>
		<comments>http://skypher.com/index.php/2009/09/29/cross-browser-parallel-asynchronous-xmlhttprequests-with-timeout/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 20:50:33 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=232</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p><B>AsyncXMLHttpRequest</B> is an extension of <B>XMLHttpRequest</B> with the following improvements:<br />
<UL><br />
  <LI> Uniform behavior on multiple different browsers (Apple Safari, Google Chrome, Microsoft Internet Explorer, Mozilla Firefox and Opera).</LI><br />
  <LI> Event handlers are called with the <B>AsyncXMLHttpRequest</B> object to which they apply as the first argument. This makes it easy to have multiple parallel requests because there is no need to find out for which object an event has fired.</LI><br />
  <LI> A <B>timeout</B> attribute can be set to a number of milliseconds , the request is aborted if it didn&#8217;t complete within the given number of milliseconds after calling <B>send()</B>.</LI><br />
  <LI> A <B>timedout</B> attribute has been added that is <B>false</B> as long as the request has not been aborted because of a time out and <B>true</B> when it has.</LI><br />
  <LI> Arguments passed to the <B>open()</B> and <B>send()</B> methods are saved in attributes of the object for later reference. These attributes are: <B>method</B>, <B>url</B>, <B>user</B> and <B>password</B> for <B>open()</B> and <B>body</B> for <B>send()</B>.</LI><br />
  <LI> Three additional events have been added: <B>onload</B>, <B>onerror</B> and <B>ontimeout</B>. These are called when the <B>readyState</B> has changed to 4 and the request has, respectively, succeeded (no timeout, <B>status</B> == 2xx), failed (no timeout, <B>status</B> != 2xx) or has timed out.</LI><br />
</UL></p>
<p><BIG><B> Cross Browser Uniform Behavior </B></BIG><br />
To make <B>AsyncXMLHttpRequest</B> work uniformly across different browsers, it catches and handles some exceptions that are throw in some browsers, but not in others. Specifically, Firefox, MSIE and Opera throw exceptions when calling the <B>open()</B> and <B>send()</B> methods for certain invalid or cross-origin urls. If any of these exceptions are caught and handled, the request will fail similar to other browser by having <B>status</B> == 0 after the <B>readyState</B> has changed to 4.</p>
<p><BIG><B> Parallel Requests </B></BIG><br />
To allow any number of parallel requests to take place and still keep track of which request is in what state, all event handlers are passed the <B>AsyncXMLHttpRequest</B> object to which they apply. In other words, when a certain <B>AsyncXMLHttpRequest</B> object is done (<B>readyState</B> == 4), the <B>onreadystatechange</B> event handler is called with the <B>AsyncXMLHttpRequest</B> object to which it applies as the first argument of the call.</p>
<p><BIG><B> Source </B></BIG><br />
Available through <A href="http://code.google.com/p/asyncxmlhttprequest/">Google code</A>.</p>
<p><BIG><B> Example </B></BIG><br />
This example shows that you can create any number of parallel requests (the browser or OS may have a built in limit) without having to keep track of which object an event is firing for because it is passes as an argument to the event handler:</p>
<p><CODE><br />
&lt;HTML&gt;<br />
  &lt;BODY onload=&#8221;go()&#8221;&gt;&lt;/BODY&gt;<br />
  &lt;SCRIPT src=&#8221;AsyncXMLHttpRequest.js&#8221;&gt;&lt;/SCRIPT&gt;<br />
  &lt;SCRIPT&gt;<br />
    function go() {<br />
      for (var i = 0; i &lt; 30; i++) {<br />
        request(location + &#8220;?&#8221; + i);<br />
      }<br />
    }<br />
    function request(url) {<br />
      span = document.createElement(&#8220;DIV&#8221;);<br />
      document.body.appendChild(span);<br />
      span.innerHTML = &#8220;&lt;B&gt;&#8221; + url + &#8220;&lt;/B&gt;&#8221;;<br />
      xmlhttp = new AsyncXMLHttpRequest();<br />
      xmlhttp.span = span;<br />
      xmlhttp.onload = load;<br />
      xmlhttp.onerror = error;<br />
      xmlhttp.ontimeout = timeout;<br />
      xmlhttp.timeout = 1000;<br />
      xmlhttp.onreadystatechange = rs;<br />
      xmlhttp.open(&#8220;GET&#8221;, url);<br />
      xmlhttp.send();<br />
    }<br />
    function rs(xmlhttp) {<br />
      xmlhttp.span.innerHTML += &#8221; rs:&#8221; + xmlhttp.readyState;<br />
    }<br />
    function load(xmlhttp) {<br />
      xmlhttp.span.innerHTML += &#8221; load:&#8221; + xmlhttp.status;<br />
    }<br />
    function error(xmlhttp) {<br />
      xmlhttp.span.innerHTML += &#8221; error:&#8221; + xmlhttp.status;<br />
    }<br />
    function timeout(xmlhttp) {<br />
      xmlhttp.span.innerHTML += &#8221; timeout:&#8221; + xmlhttp.status;<br />
    }<br />
  &lt;/SCRIPT&gt;<br />
&lt;/HTML&gt;<br />
&nbsp;<br />
</CODE></p>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2009/09/29/cross-browser-parallel-asynchronous-xmlhttprequests-with-timeout/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Safari arguments integer overflow PoC (CVE-2008-2303)</title>
		<link>http://skypher.com/index.php/2009/01/05/safari-arguments-integer-overflow-poc-cve-2008-2303/</link>
		<comments>http://skypher.com/index.php/2009/01/05/safari-arguments-integer-overflow-poc-cve-2008-2303/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 20:03:12 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[ASCII Art]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[PoC]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[integer overflow]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=91</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p>CVE-2008-2303 covers an integer overflow in the handling of indices in the &#8220;arguments&#8221; array in Apple Safari that affects iPhone, iPod and PC (Mac and Windows). It was fixed in Safari 3.2 for iPhone and iPod in July and for PC in November.<br />
More details <a title="Apple website" href="http://support.apple.com/kb/HT3298" target="_blank">here</a>. <br />
Repro <a title="Repro" href="http://skypher.com/SkyLined/Repro/Safari/arguments%5B0x800000000%5D/repro.html">here</a>.</p>
<p>I have also created proof of concept code that shows potential exploitability and demonstrates how to use heap-spraying in Safari. AFAIK this is the first use of heap spraying in Safari, but I may be wrong. Heap spraying in Safari is not that different from other browsers, just backwards <img src='http://skypher.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  The code can be found <a title="Safari arguments array index integer overflow PoC" href="http://skypher.com/SkyLined/Repro/Safari/arguments%5B0x800000000%5D/poc.html" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2009/01/05/safari-arguments-integer-overflow-poc-cve-2008-2303/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Security contacts</title>
		<link>http://skypher.com/index.php/2008/12/10/security-contacts/</link>
		<comments>http://skypher.com/index.php/2008/12/10/security-contacts/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 17:52:49 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[contact information]]></category>
		<category><![CDATA[security team]]></category>
		<category><![CDATA[software vendors]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=78</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve created a table with contact information for security teams for mayor software vendors. I&#8217;m hoping you&#8217;ll find the information useful when you&#8217;re trying to report a vulnerability. If you have any more contact information or find an error in the list, <a title="mail me" href="mailto:berendjanwever@gmail.com" target="_blank">let me know</a>.</p>
<p>The list is here:<br />
<span><a href="http://skypher.com/wiki/index.php?title=List_of_security_teams_contact_information">http://skypher.com/wiki/index.php?title=List_of_security_teams_contact_information</a><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2008/12/10/security-contacts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript stack trace</title>
		<link>http://skypher.com/index.php/2008/08/26/javascript-stack-trace/</link>
		<comments>http://skypher.com/index.php/2008/08/26/javascript-stack-trace/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 10:07:43 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[stack]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=38</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve created an example script that outputs a stack dump in JavaScript. It shows all the functions that have been called, their arguments and the values of these arguments. I find it to be very useful while writing complex JavaScripts &#8211; I use it in asserts and error handlers to find out why things go wrong quickly. It works in Internet Explorer, FireFox and Safari, but not in Opera.</p>
<p><a title="JavaScript stack dump" href="http://skypher.com/wiki/index.php?title=JS/Stack_dump" target="_self">Available here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2008/08/26/javascript-stack-trace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Safari vulnerability</title>
		<link>http://skypher.com/index.php/2008/07/14/apple-releases-patch-remote-code-execution-vulnerability-in-safari-on-iphone-and-ipod/</link>
		<comments>http://skypher.com/index.php/2008/07/14/apple-releases-patch-remote-code-execution-vulnerability-in-safari-on-iphone-and-ipod/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 17:08:27 +0000</pubDate>
		<dc:creator>SkyLined</dc:creator>
				<category><![CDATA[Safari]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Vulnerability]]></category>

		<guid isPermaLink="false">http://skypher.com/?p=26</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  preg_split() [<a href='function.preg-split'>function.preg-split</a>]: Compilation failed: lookbehind assertion is not fixed length at offset 14 in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>77</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/c3682jgn/domains/skypher.com/public_html/wp-content/themes/braille/options/plugins.php</b> on line <b>78</b><br />
]]></description>
			<content:encoded><![CDATA[<p>Apple has released a <a title="Link to Apple website" href="http://support.apple.com/kb/HT2351" target="_blank">patch </a>for a remote code execution vulnerability that I reported to them. This vulnerability affects <a title="Link to wikipedia" href="http://en.wikipedia.org/wiki/WebKit#JavaScriptCore" target="_blank">JavaScripCore</a>, which is part of <a title="Link to wikipedia" href="http://en.wikipedia.org/wiki/Safari_(web_browser)" target="_blank">Safari</a>. The patch should fix the vulnerability on iPhones and iPods. Other products that use JavaScriptCore, such as Safari for Mac and Windows, are still vulnerable.</p>
]]></content:encoded>
			<wfw:commentRss>http://skypher.com/index.php/2008/07/14/apple-releases-patch-remote-code-execution-vulnerability-in-safari-on-iphone-and-ipod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

