Backport a bunch of bug fixes from upstream, including fixing WAV
header writing on 64-bit archs. From Brad (maintainer)
This commit is contained in:
parent
c3677a7fb2
commit
075e993185
@ -1,4 +1,4 @@
|
|||||||
# $OpenBSD: Makefile,v 1.34 2010/10/27 07:57:34 dcoppa Exp $
|
# $OpenBSD: Makefile,v 1.35 2010/11/07 18:58:24 dcoppa Exp $
|
||||||
|
|
||||||
SHARED_ONLY= Yes
|
SHARED_ONLY= Yes
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ COMMENT= SWF player with Firefox browser plugin
|
|||||||
|
|
||||||
VER= 0.8.8
|
VER= 0.8.8
|
||||||
DISTNAME= gnash-${VER}
|
DISTNAME= gnash-${VER}
|
||||||
REVISION= 1
|
REVISION= 2
|
||||||
CATEGORIES= www
|
CATEGORIES= www
|
||||||
MASTER_SITES= ${MASTER_SITE_GNU:=gnash/${VER}/}
|
MASTER_SITES= ${MASTER_SITE_GNU:=gnash/${VER}/}
|
||||||
|
|
||||||
|
20
www/gnash/patches/patch-gui_Player_cpp
Normal file
20
www/gnash/patches/patch-gui_Player_cpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
$OpenBSD: patch-gui_Player_cpp,v 1.1 2010/11/07 18:58:24 dcoppa Exp $
|
||||||
|
|
||||||
|
"base" parameter is always to be considered a directory.
|
||||||
|
|
||||||
|
--- gui/Player.cpp.orig Sat Aug 7 11:50:00 2010
|
||||||
|
+++ gui/Player.cpp Fri Nov 5 21:15:25 2010
|
||||||
|
@@ -314,9 +314,12 @@ Player::run(int argc, char* argv[], const std::string&
|
||||||
|
|
||||||
|
// Parse player parameters. These are not passed to the SWF, but rather
|
||||||
|
// control stage properties etc.
|
||||||
|
+ // NOTE: it is intentional to force a trailing slash to "base" argument
|
||||||
|
+ // as it was tested that the "base" argument is always considered
|
||||||
|
+ // a directory!
|
||||||
|
Params::const_iterator it = _params.find("base");
|
||||||
|
const URL baseURL = (it == _params.end()) ? _baseurl :
|
||||||
|
- URL(it->second, _baseurl);
|
||||||
|
+ URL(it->second+"/", _baseurl);
|
||||||
|
/// The RunResources should be populated before parsing.
|
||||||
|
_runResources.reset(new RunResources(baseURL.str()));
|
||||||
|
|
71
www/gnash/patches/patch-libcore_DisplayList_cpp
Normal file
71
www/gnash/patches/patch-libcore_DisplayList_cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
$OpenBSD: patch-libcore_DisplayList_cpp,v 1.1 2010/11/07 18:58:24 dcoppa Exp $
|
||||||
|
|
||||||
|
Drop assertion, handle the case instead.
|
||||||
|
|
||||||
|
--- libcore/DisplayList.cpp.orig Sat Aug 7 11:50:00 2010
|
||||||
|
+++ libcore/DisplayList.cpp Fri Nov 5 21:15:20 2010
|
||||||
|
@@ -45,15 +45,11 @@ namespace {
|
||||||
|
DisplayList::const_iterator beginNonRemoved(
|
||||||
|
const DisplayList::container_type& c);
|
||||||
|
|
||||||
|
- /// Return an iterator succeeding the last element in zone
|
||||||
|
- /// (-16384, 0xffff-16384)
|
||||||
|
+ /// Return the first element in the DisplayList whose depth exceeds
|
||||||
|
+ /// 65535 (-16384).
|
||||||
|
DisplayList::iterator dlistTagsEffectiveZoneEnd(
|
||||||
|
DisplayList::container_type& c);
|
||||||
|
|
||||||
|
- /// Return an constant iterator succeeding the last element
|
||||||
|
- /// in (-16384, 0xffff-16384)
|
||||||
|
- DisplayList::const_iterator dlistTagsEffectiveZoneEnd(
|
||||||
|
- const DisplayList::container_type& c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Anonymous namespace for generic algorithm functors.
|
||||||
|
@@ -881,21 +877,27 @@ DisplayList::sort()
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
-DisplayList::mergeDisplayList(DisplayList & newList)
|
||||||
|
+DisplayList::mergeDisplayList(DisplayList& newList)
|
||||||
|
{
|
||||||
|
testInvariant();
|
||||||
|
|
||||||
|
+ log_debug("New list size: %s", newList.size());
|
||||||
|
+
|
||||||
|
iterator itOld = beginNonRemoved(_charsByDepth);
|
||||||
|
iterator itNew = beginNonRemoved(newList._charsByDepth);
|
||||||
|
|
||||||
|
iterator itOldEnd = dlistTagsEffectiveZoneEnd(_charsByDepth);
|
||||||
|
- iterator itNewEnd = newList._charsByDepth.end();
|
||||||
|
- assert(itNewEnd == dlistTagsEffectiveZoneEnd(newList._charsByDepth) );
|
||||||
|
|
||||||
|
+ // There used to be an assertion here that no character in the new list
|
||||||
|
+ // is at depth 65535 or higher. There's no reason why the tags executed
|
||||||
|
+ // on the new list shouldn't do this though. Bug #29282 does this.
|
||||||
|
+ // TODO: check whether we should be ignoring that character.
|
||||||
|
+ iterator itNewEnd = dlistTagsEffectiveZoneEnd(newList._charsByDepth);
|
||||||
|
+
|
||||||
|
// step1.
|
||||||
|
// starting scanning both lists.
|
||||||
|
- while (itOld != itOldEnd)
|
||||||
|
- {
|
||||||
|
+ while (itOld != itOldEnd) {
|
||||||
|
+
|
||||||
|
iterator itOldBackup = itOld;
|
||||||
|
|
||||||
|
DisplayObject* chOld = *itOldBackup;
|
||||||
|
@@ -1105,13 +1107,6 @@ beginNonRemoved(const DisplayList::container_type& c)
|
||||||
|
|
||||||
|
DisplayList::iterator
|
||||||
|
dlistTagsEffectiveZoneEnd(DisplayList::container_type& c)
|
||||||
|
-{
|
||||||
|
- return std::find_if(c.begin(), c.end(),
|
||||||
|
- DepthGreaterOrEqual(0xffff + DisplayObject::staticDepthOffset));
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-DisplayList::const_iterator
|
||||||
|
-dlistTagsEffectiveZoneEnd(const DisplayList::container_type& c)
|
||||||
|
{
|
||||||
|
return std::find_if(c.begin(), c.end(),
|
||||||
|
DepthGreaterOrEqual(0xffff + DisplayObject::staticDepthOffset));
|
31
www/gnash/patches/patch-libcore_ExternalInterface_cpp
Normal file
31
www/gnash/patches/patch-libcore_ExternalInterface_cpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
$OpenBSD: patch-libcore_ExternalInterface_cpp,v 1.1 2010/11/07 18:58:24 dcoppa Exp $
|
||||||
|
|
||||||
|
Don't wait for data in ::readBrowser, read only if data is available..
|
||||||
|
|
||||||
|
--- libcore/ExternalInterface.cpp.orig Sat Aug 7 11:50:00 2010
|
||||||
|
+++ libcore/ExternalInterface.cpp Fri Nov 5 21:29:04 2010
|
||||||
|
@@ -663,21 +663,12 @@ ExternalInterface::readBrowser(int fd)
|
||||||
|
std::string empty;
|
||||||
|
// Wait for some data from the player
|
||||||
|
int bytes = 0;
|
||||||
|
- fd_set fdset;
|
||||||
|
- FD_ZERO(&fdset);
|
||||||
|
- FD_SET(fd, &fdset);
|
||||||
|
- struct timeval tval;
|
||||||
|
- tval.tv_sec = 10;
|
||||||
|
- tval.tv_usec = 0;
|
||||||
|
- // log_debug("Waiting for data... ");
|
||||||
|
- if (select(fd+1, &fdset, NULL, NULL, &tval)) {
|
||||||
|
- // log_debug("There is data in the network");
|
||||||
|
+
|
||||||
|
#ifndef _WIN32
|
||||||
|
- ioctl(fd, FIONREAD, &bytes);
|
||||||
|
+ ioctl(fd, FIONREAD, &bytes);
|
||||||
|
#else
|
||||||
|
- ioctlSocket(fd, FIONREAD, &bytes);
|
||||||
|
+ ioctlSocket(fd, FIONREAD, &bytes);
|
||||||
|
#endif
|
||||||
|
- }
|
||||||
|
|
||||||
|
// No data yet
|
||||||
|
if (bytes == 0) {
|
18
www/gnash/patches/patch-libcore_asobj_XMLNode_as_cpp
Normal file
18
www/gnash/patches/patch-libcore_asobj_XMLNode_as_cpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
$OpenBSD: patch-libcore_asobj_XMLNode_as_cpp,v 1.1 2010/11/07 18:58:24 dcoppa Exp $
|
||||||
|
|
||||||
|
Mark parent XMLNodes. Fixes bug #31044.
|
||||||
|
|
||||||
|
--- libcore/asobj/XMLNode_as.cpp.orig Sat Aug 7 11:50:00 2010
|
||||||
|
+++ libcore/asobj/XMLNode_as.cpp Fri Nov 5 21:15:00 2010
|
||||||
|
@@ -465,6 +465,11 @@ XMLNode_as::stringify(const XMLNode_as& xml, std::ostr
|
||||||
|
void
|
||||||
|
XMLNode_as::setReachable()
|
||||||
|
{
|
||||||
|
+ // If there is a parent, make sure its object is reachable. This goes
|
||||||
|
+ // up towards the root node of tree without marking the XMLNode
|
||||||
|
+ // resources (which would cause infinite recursion).
|
||||||
|
+ if (_parent && _parent->_object) _parent->_object->setReachable();
|
||||||
|
+
|
||||||
|
// Mark children
|
||||||
|
std::for_each(_children.begin(), _children.end(),
|
||||||
|
boost::mem_fn(&XMLNode_as::setReachable));
|
47
www/gnash/patches/patch-libsound_sdl_sound_handler_sdl_cpp
Normal file
47
www/gnash/patches/patch-libsound_sdl_sound_handler_sdl_cpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
$OpenBSD: patch-libsound_sdl_sound_handler_sdl_cpp,v 1.1 2010/11/07 18:58:24 dcoppa Exp $
|
||||||
|
|
||||||
|
Use exact-size integers for WAV header (see bug #30993)
|
||||||
|
|
||||||
|
--- libsound/sdl/sound_handler_sdl.cpp.orig Sat Aug 7 11:50:00 2010
|
||||||
|
+++ libsound/sdl/sound_handler_sdl.cpp Fri Nov 5 21:15:15 2010
|
||||||
|
@@ -31,6 +31,7 @@
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <boost/scoped_array.hpp>
|
||||||
|
+#include <boost/cstdint.hpp>
|
||||||
|
#include <SDL.h>
|
||||||
|
|
||||||
|
// Define this to get debugging call about pausing/unpausing audio
|
||||||
|
@@ -45,23 +46,23 @@ namespace { // anonymous
|
||||||
|
// http://ftp.iptel.org/pub/sems/doc/full/current/wav__hdr_8c-source.html
|
||||||
|
typedef struct{
|
||||||
|
char rID[4]; // 'RIFF'
|
||||||
|
- long int rLen;
|
||||||
|
+ boost::uint32_t rLen;
|
||||||
|
char wID[4]; // 'WAVE'
|
||||||
|
char fId[4]; // 'fmt '
|
||||||
|
- long int pcm_header_len; // varies...
|
||||||
|
- short int wFormatTag;
|
||||||
|
- short int nChannels; // 1,2 for stereo data is (l,r) pairs
|
||||||
|
- long int nSamplesPerSec;
|
||||||
|
- long int nAvgBytesPerSec;
|
||||||
|
- short int nBlockAlign;
|
||||||
|
- short int nBitsPerSample;
|
||||||
|
+ boost::uint32_t pcm_header_len; // varies...
|
||||||
|
+ boost::int16_t wFormatTag;
|
||||||
|
+ boost::int16_t nChannels; // 1,2 for stereo data is (l,r) pairs
|
||||||
|
+ boost::uint32_t nSamplesPerSec;
|
||||||
|
+ boost::uint32_t nAvgBytesPerSec;
|
||||||
|
+ boost::int16_t nBlockAlign;
|
||||||
|
+ boost::int16_t nBitsPerSample;
|
||||||
|
} WAV_HDR;
|
||||||
|
|
||||||
|
// Chunk of wave file
|
||||||
|
// http://ftp.iptel.org/pub/sems/doc/full/current/wav__hdr_8c-source.html
|
||||||
|
typedef struct{
|
||||||
|
char dId[4]; // 'data' or 'fact'
|
||||||
|
- long int dLen;
|
||||||
|
+ boost::uint32_t dLen;
|
||||||
|
} CHUNK_HDR;
|
||||||
|
|
||||||
|
} // end of anonymous namespace
|
71
www/gnash/patches/patch-plugin_npapi_plugin_cpp
Normal file
71
www/gnash/patches/patch-plugin_npapi_plugin_cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
$OpenBSD: patch-plugin_npapi_plugin_cpp,v 1.3 2010/11/07 18:58:24 dcoppa Exp $
|
||||||
|
|
||||||
|
Use window.document.baseURI rather than
|
||||||
|
window.document.location.href. The former
|
||||||
|
honours <base> tags, fixing bug #31497
|
||||||
|
(aka easy come, easy go)
|
||||||
|
|
||||||
|
--- plugin/npapi/plugin.cpp.orig Mon Aug 16 11:46:55 2010
|
||||||
|
+++ plugin/npapi/plugin.cpp Fri Nov 5 21:15:29 2010
|
||||||
|
@@ -1218,6 +1218,13 @@ nsPluginInstance::startProc()
|
||||||
|
std::string
|
||||||
|
nsPluginInstance::getCurrentPageURL() const
|
||||||
|
{
|
||||||
|
+ // Return:
|
||||||
|
+ // window.document.baseURI
|
||||||
|
+ //
|
||||||
|
+ // Was (bogus):
|
||||||
|
+ // window.document.location.href
|
||||||
|
+ //
|
||||||
|
+
|
||||||
|
NPP npp = _instance;
|
||||||
|
|
||||||
|
NPIdentifier sDocument = NPN_GetStringIdentifier("document");
|
||||||
|
@@ -1230,20 +1237,21 @@ nsPluginInstance::getCurrentPageURL() const
|
||||||
|
NPN_ReleaseObject(window);
|
||||||
|
|
||||||
|
if (!NPVARIANT_IS_OBJECT(vDoc)) {
|
||||||
|
- gnash::log_error("Can't get window object");
|
||||||
|
- return NULL;
|
||||||
|
+ gnash::log_error("Can't get window.document object");
|
||||||
|
+ return std::string();
|
||||||
|
}
|
||||||
|
|
||||||
|
NPObject* npDoc = NPVARIANT_TO_OBJECT(vDoc);
|
||||||
|
|
||||||
|
+/*
|
||||||
|
NPIdentifier sLocation = NPN_GetStringIdentifier("location");
|
||||||
|
NPVariant vLoc;
|
||||||
|
NPN_GetProperty(npp, npDoc, sLocation, &vLoc);
|
||||||
|
NPN_ReleaseObject(npDoc);
|
||||||
|
|
||||||
|
if (!NPVARIANT_IS_OBJECT(vLoc)) {
|
||||||
|
- gnash::log_error("Can't get window.location object");
|
||||||
|
- return NULL;
|
||||||
|
+ gnash::log_error("Can't get window.document.location object");
|
||||||
|
+ return std::string();
|
||||||
|
}
|
||||||
|
|
||||||
|
NPObject* npLoc = NPVARIANT_TO_OBJECT(vLoc);
|
||||||
|
@@ -1254,8 +1262,19 @@ nsPluginInstance::getCurrentPageURL() const
|
||||||
|
NPN_ReleaseObject(npLoc);
|
||||||
|
|
||||||
|
if (!NPVARIANT_IS_STRING(vProp)) {
|
||||||
|
- gnash::log_error("Can't get window.location.href object");
|
||||||
|
- return NULL;
|
||||||
|
+ gnash::log_error("Can't get window.document.location.href string");
|
||||||
|
+ return std::string();
|
||||||
|
+ }
|
||||||
|
+*/
|
||||||
|
+
|
||||||
|
+ NPIdentifier sProperty = NPN_GetStringIdentifier("baseURI");
|
||||||
|
+ NPVariant vProp;
|
||||||
|
+ NPN_GetProperty(npp, npDoc, sProperty, &vProp);
|
||||||
|
+ NPN_ReleaseObject(npDoc);
|
||||||
|
+
|
||||||
|
+ if (!NPVARIANT_IS_STRING(vProp)) {
|
||||||
|
+ gnash::log_error("Can't get window.document.baseURI string");
|
||||||
|
+ return std::string();
|
||||||
|
}
|
||||||
|
|
||||||
|
const NPString& propValue = NPVARIANT_TO_STRING(vProp);
|
Loading…
Reference in New Issue
Block a user