[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/vm/ASHandlers.cpp
From: |
Benjamin Wolsey |
Subject: |
[Gnash-commit] gnash ChangeLog server/vm/ASHandlers.cpp |
Date: |
Thu, 06 Mar 2008 11:11:50 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Benjamin Wolsey <bwy> 08/03/06 11:11:49
Modified files:
. : ChangeLog
server/vm : ASHandlers.cpp
Log message:
* server/vm/ASHandlers.cpp: fix mbchr to return a UTF-8 string;
make sure both mbchr and chr handle characters only up to
65535. Fixes behaviour for SWF6, 7, and 8.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5814&r2=1.5815
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.203&r2=1.204
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5814
retrieving revision 1.5815
diff -u -b -r1.5814 -r1.5815
--- ChangeLog 6 Mar 2008 05:22:49 -0000 1.5814
+++ ChangeLog 6 Mar 2008 11:11:48 -0000 1.5815
@@ -1,3 +1,9 @@
+2008-03-06 Benjamin Wolsey <address@hidden>
+
+ * server/vm/ASHandlers.cpp: fix mbchr to return a UTF-8 string;
+ make sure both mbchr and chr handle characters only up to
+ 65535. Fixes behaviour for SWF6, 7, and 8.
+
2008-03-04 Bastiaan Jacques <address@hidden>
* libamf/{amf.h, element.h, lcshm.h, sol.h},
Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.203
retrieving revision 1.204
diff -u -b -r1.203 -r1.204
--- server/vm/ASHandlers.cpp 5 Mar 2008 11:54:32 -0000 1.203
+++ server/vm/ASHandlers.cpp 6 Mar 2008 11:11:49 -0000 1.204
@@ -1667,7 +1667,8 @@
as_environment& env = thread.env;
thread.ensureStack(1);
- boost::uint32_t c = env.top(0).to_int();
+ // Only handles values up to 65535
+ boost::uint16_t c = static_cast<boost::uint16_t>(env.top(0).to_int());
// If the argument to chr() is '0', we return
// nothing, not NULL
@@ -1799,25 +1800,21 @@
void
SWFHandlers::ActionMbChr(ActionExec& thread)
{
-// GNASH_REPORT_FUNCTION;
-// The correctness of this depends on the locale being correct,
-// which it should be far more often than not, by choosing UTF8.
+ /// This only generates UTF-8 characters. No idea
+ /// what difference user locale might make, but UTF-8
+ /// is generally GOOD.
as_environment& env = thread.env;
thread.ensureStack(1);
- wchar_t i = static_cast<wchar_t> (env.top(0).to_int());
- boost::scoped_array<char> strng(new char [MB_CUR_MAX + 1]);
- char *str = strng.get();
- memset(str, '\0', MB_CUR_MAX + 1);
- if (wctomb(str, i) == -1)
- {
- env.top(0).set_undefined();
- }
- else
- {
- env.top(0).set_string(str);
- }
+ // Cut to uint16, as characters above 65535 'wrap around'
+ const boost::uint16_t i = static_cast<boost::uint16_t>
(env.top(0).to_int());
+
+ std::string out = utf8::encodeUnicodeCharacter(i);
+
+ /// Always valid, or can it be undefined?
+ env.top(0).set_string(out);
+
}
// also known as WaitForFrame2