FYI I&#39;m also looking at this problem right now.&nbsp; I too need to be able to ignore comments of arbitrarily large size.&nbsp; The problem that I have is that I&#39;ve currently statically allocated for a maximum of 7 ogg buffers in _fetch_buffer().&nbsp; This works fine for small comments (and all decoding needs I&#39;ve run into thus far) but large comment headers make additional requests to get more ogg buffers.&nbsp; I think that in the comment decode phase Ogg will allocate buffers continuously to hold all the metadata, which I can&#39;t handle.<br>
<br>My thought was to short-circuit this behavior so that, if we&#39;re in the comment gathering phase, all data reads go to a dummy ogg_buffer.&nbsp; I would probably add the code in ogg_buffer_alloc() to check if this is a real request for a new buffer or if we should map to the dummy buffer/reference.&nbsp; I&#39;m pretty sure I can safely find the start and end points of this phase by setting a flag right after _vorbis_unpack_info finishes and clearing the flag after _vorbis_unpack_comment finishes. This is a pretty big kludge but I think it would work.<br>
<br>Thoughts?<br><br><div class="gmail_quote">On Thu, Jan 22, 2009 at 10:28 AM, Andy Grundman <span dir="ltr">&lt;<a href="mailto:andy@slimdevices.com">andy@slimdevices.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
OK, I need to make some more test files and see if any of them can be<br>
read properly. &nbsp;I may use your patch anyway because it at least avoids<br>
allocating tons of memory and crashing. &nbsp;Even if the file doesn&#39;t play<br>
it will fail more gracefully than it currently does.<br>
<div><div></div><div class="Wj3C7c"><br>
On Jan 22, 2009, at 10:18 AM, Nicholas Vinen wrote:<br>
<br>
&gt;<br>
&gt; Unfortunately while in many cases the patch works, I&#39;ve found that it<br>
&gt; has problems with certain files. It&#39;s a bit of a hack and I don&#39;t yet<br>
&gt; fully understand why it doesn&#39;t work.<br>
&gt;<br>
&gt; A much better solution would be to examine the header of any packet<br>
&gt; which exceeds a certain size and is not yet fully read in yet, and<br>
&gt; determine the type. If it&#39;s the comment field, it should be possible<br>
&gt; to<br>
&gt; process what&#39;s already been read in and sync up to the next packet<br>
&gt; without reading the rest in at all, rather than what I did which is to<br>
&gt; prevent the current packet in memory growing once it reaches a<br>
&gt; certain size.<br>
&gt;<br>
&gt; So in summary I think somebody needs to come up with a better<br>
&gt; solution.<br>
&gt; I will do it at some point but I don&#39;t know when that will be, it<br>
&gt; could<br>
&gt; be a while. Someone who understands the Ogg packet code better would<br>
&gt; likely do a good job. I don&#39;t yet understand it fully.<br>
&gt;<br>
&gt; You may be able to get my code to work but as it is unfortunately I<br>
&gt; don&#39;t think it&#39;s 100%. And yes you may be right, the later patch may<br>
&gt; have broken the large comment skipping.<br>
&gt;<br>
&gt;<br>
&gt; Nicholas<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Andy Grundman wrote:<br>
&gt;&gt; Hi Nicholas,<br>
&gt;&gt;<br>
&gt;&gt; I&#39;m working on implementing your comment truncation patch into our<br>
&gt;&gt; Tremor code. &nbsp;I have a few questions about it.<br>
&gt;&gt;<br>
&gt;&gt; Comparing Tremor3.patch [3] and your original patch [1], #3 seems to<br>
&gt;&gt; have removed the extra code in _vorbis_unpack_comment that breaks out<br>
&gt;&gt; of the comment reading loop if the data was truncated. &nbsp;Using patch<br>
&gt;&gt; #3<br>
&gt;&gt; this loop always tries to allocate space for the truncated comment<br>
&gt;&gt; and<br>
&gt;&gt; fails, so I think what you did in #1 is the right solution. &nbsp;However,<br>
&gt;&gt; using #1 I end up failing on my test file with ENOTVORBIS because the<br>
&gt;&gt; check for the &quot;vorbis&quot; string in vorbis_dsp_headerin fails when<br>
&gt;&gt; looking for the codebooks header.<br>
&gt;&gt;<br>
&gt;&gt; Thanks,<br>
&gt;&gt; -Andy<br>
&gt;&gt;<br>
&gt;&gt; [1] <a href="http://x256.org/%7Ehb/Tremor.patch" target="_blank">http://x256.org/~hb/Tremor.patch</a><br>
&gt;&gt; [2] <a href="http://x256.org/%7Ehb/Tremor3.patch" target="_blank">http://x256.org/~hb/Tremor3.patch</a><br>
<br>
_______________________________________________<br>
Tremor mailing list<br>
<a href="mailto:Tremor@xiph.org">Tremor@xiph.org</a><br>
<a href="http://lists.xiph.org/mailman/listinfo/tremor" target="_blank">http://lists.xiph.org/mailman/listinfo/tremor</a><br>
</div></div></blockquote></div><br>