Go to the documentation of this file.
19 #ifndef GNASH_ACTION_BUFFER_H
20 #define GNASH_ACTION_BUFFER_H
25 #include <boost/noncopyable.hpp>
35 class movie_definition;
65 size_t size()
const {
return m_buffer.size(); }
69 if (off >= m_buffer.size()) {
77 std::string
disasm(
size_t pc)
const;
85 assert(pc <= m_buffer.size() );
86 if (pc == m_buffer.size())
89 "1 byte remains in the buffer"));
91 return reinterpret_cast<const char*
>(&m_buffer[pc]);
97 assert (pc < m_buffer.size());
98 return &m_buffer.at(pc);
107 if (pc + 1 >= m_buffer.size()) {
110 std::int16_t ret = (m_buffer[pc] | (m_buffer[pc + 1] << 8));
118 return static_cast<std::uint16_t
>(
read_int16(pc));
127 if (pc + 3 >= m_buffer.size()) {
131 std::int32_t val = m_buffer[pc]
132 | (m_buffer[pc + 1] << 8)
133 | (m_buffer[pc + 2] << 16)
134 | (m_buffer[pc + 3] << 24);
154 if ( _pools.empty() )
return nullptr;
159 if (
n < pool.size() )
return pool[
n];
192 std::vector<std::uint8_t> m_buffer;
195 typedef std::map<size_t, ConstantPool> PoolsMap;
196 mutable PoolsMap _pools;
210 #endif // GNASH_ACTION_BUFFER_H
static const SWFHandlers & instance()
Return the singleton instance of SWFHandlers class.
Definition: ASHandlers.cpp:421
size_t size() const
Definition: action_buffer.h:65
@ l
Definition: GnashKey.h:158
A singleton containing the supported SWF Action handlers.
Definition: ASHandlers.h:74
void log_swferror(StringType msg, Args... args)
Definition: log.h:325
@ d
Definition: GnashKey.h:150
const char * dictionary_get(size_t n) const
Return a value from the constant pool.
Definition: action_buffer.h:152
Definition: GnashException.h:182
@ i
Definition: GnashKey.h:155
std::string disasm(size_t pc) const
Disassemble instruction at given offset and return as a string.
Definition: action_buffer.cpp:454
virtual const std::string & get_url() const =0
Return the URL of the SWF stream this definition has been read from.
#define _(String)
Definition: log.h:44
ActionType
SWF action ids. Symbolic names copied from Ming.
Definition: SWF.h:125
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:41
const movie_definition & getMovieDefinition() const
Definition: action_buffer.h:185
@ s
Definition: GnashKey.h:165
@ ARG_STR
Definition: ASHandlers.h:37
std::uint16_t read_uint16(size_t pc) const
read_int16 should check buffer boundaries.
Definition: action_buffer.h:116
unsigned read(char *buf, unsigned count)
Read <count> bytes from the source stream and copy that data to <buf>.
Definition: SWFStream.cpp:68
@ n
Definition: GnashKey.h:160
@ ARG_PUSH_DATA
Definition: ASHandlers.h:43
action_buffer(const movie_definition &md)
Definition: action_buffer.cpp:40
@ ACTION_END
Definition: SWF.h:126
virtual int get_version() const =0
Client program's interface to the definition of a movie or sprite.
Definition: movie_definition.h:96
void log_error(StringType msg, Args... args)
Definition: log.h:283
std::uint8_t operator[](size_t off) const
Definition: action_buffer.h:67
#define IF_VERBOSE_MALFORMED_SWF(x)
Definition: log.h:404
@ ARG_U16
Definition: ASHandlers.h:41
@ ARG_S16
Definition: ASHandlers.h:42
type
Definition: GnashKey.h:330
unsigned long tell()
Return our current (byte) position in the input stream.
Definition: SWFStream.cpp:447
void read(SWFStream &in, unsigned long endPos)
Read action bytes from input stream up to but not including endPos.
Definition: action_buffer.cpp:48
@ length
Definition: klash_part.cpp:329
std::int16_t read_int16(size_t pc) const
Get a signed integer value from given offset.
Definition: action_buffer.h:105
@ ARG_DECL_DICT
Definition: ASHandlers.h:44
std::vector< const char * > ConstantPool
An indexed list of strings (must match the definition in action_buffer.h)
Definition: ConstantPool.h:27
@ p
Definition: GnashKey.h:162
@ ARG_U8
Definition: ASHandlers.h:40
ActionType lastType() const
Definition: ASHandlers.h:85
std::int32_t read_int32(size_t pc) const
Read a 32-bit integer starting at given offset.
Definition: action_buffer.h:125
unsigned long get_tag_end_position()
Return the file position of the end of the current tag.
Definition: SWFStream.cpp:497
const unsigned char * getFramePointer(size_t pc) const
Get a pointer to the current instruction within the code.
Definition: action_buffer.h:95
ArgumentType
Definition: ASHandlers.h:35
const ConstantPool & readConstantPool(size_t start_pc, size_t stop_pc) const
Read an SWF::ACTION_CONSTANTPOOL opcode and return as a dictionary.
Definition: action_buffer.cpp:101
@ f
Definition: GnashKey.h:152
@ ARG_NONE
Definition: ASHandlers.h:36
@ c
Definition: GnashKey.h:149
@ ARG_FUNCTION2
Definition: ASHandlers.h:45
float read_float_little(size_t pc) const
Read a little-endian 32-bit float starting at given offset.
Definition: action_buffer.cpp:461
A code segment.
Definition: action_buffer.h:50
const std::string & getDefinitionURL() const
Return url of the SWF this action block was found in.
Definition: action_buffer.cpp:473
SWF stream wrapper class.
Definition: SWFStream.h:59
@ ARG_HEX
Definition: ASHandlers.h:39
const char * read_string(size_t pc) const
Get a null-terminated string from given offset.
Definition: action_buffer.h:83
double read_double_wacky(size_t pc) const
Read a 64-bit double starting at given offset.
Definition: action_buffer.cpp:467
@ SWF
Definition: GnashKey.h:331
@ u
Definition: GnashKey.h:167
std::string hexify(const unsigned char *p, size_t length, bool ascii)
Convert a sequence of bytes to hex or ascii format.
Definition: log.cpp:48
int getDefinitionVersion() const
Return version of the SWF this action block was found in.
Definition: action_buffer.cpp:479