Go to the documentation of this file.
20 #ifndef GNASH_STREAM_H
21 #define GNASH_STREAM_H
71 unsigned read_uint(
unsigned short bitcount);
88 int read_sint(
unsigned short bitcount);
106 float read_short_ufixed();
112 float read_short_sfixed();
118 float read_long_float();
145 unsigned read(
char *buf,
unsigned count);
151 std::uint8_t read_u8();
157 std::int8_t read_s8();
163 std::uint16_t read_u16();
169 std::int16_t read_s16();
175 std::uint32_t read_u32();
182 std::int32_t read_s32();
194 std::uint32_t res = read_u8();
195 if (!(res & 0x00000080))
return res;
198 res = (res & 0x0000007F) | read_u8() << 7;
199 if (!(res & 0x00004000))
return res;
202 res = (res & 0x00003FFF) | read_u8() << 14;
203 if (!(res & 0x00200000))
return res;
206 res = (res & 0x001FFFFF) | read_u8() << 21;
207 if (!(res & 0x10000000))
return res;
210 res = (res & 0x0FFFFFFF) | read_u8() << 28;
223 if (!(read_u8() & 0x80))
return;
225 if (!(read_u8() & 0x80))
return;
227 if (!(read_u8() & 0x80))
return;
229 if (!(read_u8() & 0x80))
return;
231 static_cast<void> (read_u8());
247 unsigned count = read_u8();
265 void read_string(std::string& to);
278 void read_string_with_length(std::string& to);
293 void read_string_with_length(
unsigned len, std::string& to);
304 unsigned long tell();
317 bool seek(
unsigned long pos);
320 unsigned long get_tag_end_position();
349 size_t curpos = tell();
350 return seek(curpos+num);
357 seek(get_tag_end_position());
370 void ensureBytes(
unsigned long needed);
384 #ifndef GNASH_TRUST_SWF_INPUT
385 if ( _tagBoundsStack.empty() )
return;
386 unsigned long int bytesLeft = get_tag_end_position() - tell();
387 unsigned long int bitsLeft = (bytesLeft*8)+m_unused_bits;
388 if ( bitsLeft < needed )
390 std::stringstream ss;
391 ss <<
"premature end of tag: need to read " << needed <<
" bytes, but only " << bitsLeft <<
" left in this tag";
418 std::uint8_t m_current_byte;
419 std::uint8_t m_unused_bits;
421 typedef std::pair<unsigned long,unsigned long> TagBoundaries;
423 std::vector<TagBoundaries> _tagBoundsStack;
430 #endif // GNASH_STREAM_H
std::uint16_t read_le16()
Read a 16-bit word from a little-endian stream.
Definition: IOChannel.cpp:39
void ensureBits(unsigned long needed)
Ensure the requested number of bits are available for a bitwise read in currently opened tag.
Definition: SWFStream.h:382
unsigned read_uint(unsigned short bitcount)
Reads a bit-packed unsigned integer from the stream and returns it. The given bitcount determines the...
Definition: SWFStream.cpp:102
void skip_to_tag_end()
Discard all bytes up to end of tag.
Definition: SWFStream.h:354
int read_sint(unsigned short bitcount)
Reads a bit-packed little-endian signed integer from the stream. The given bitcount determines the nu...
Definition: SWFStream.cpp:191
std::int8_t read_s8()
Read a aligned signed 8-bit value from the stream.
Definition: SWFStream.cpp:326
void log_swferror(StringType msg, Args... args)
Definition: log.h:325
@ d
Definition: GnashKey.h:150
TagType
SWF tag types. Symbolic names copied from Ming.
Definition: SWF.h:31
@ i
Definition: GnashKey.h:155
void consumeInput()
Consume any pending input.
Definition: SWFStream.cpp:601
#define _(String)
Definition: log.h:44
float read_long_float()
Read a 32bit (1:sign 8:exp 23:mantissa) floating point value.
Definition: SWFStream.cpp:285
void read_string(std::string &to)
Reads a null-terminated string from the given file and assigns it to the given std::string,...
Definition: SWFStream.cpp:395
unsigned read_variable_count()
Read a length in a byte or three.
Definition: SWFStream.h:244
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:41
@ s
Definition: GnashKey.h:165
double read_d64()
Read a 64-bit double value.
Definition: SWFStream.cpp:300
unsigned read(char *buf, unsigned count)
Read <count> bytes from the source stream and copy that data to <buf>.
Definition: SWFStream.cpp:68
virtual bool seek(std::streampos p)=0
Seek to the specified position.
void log_error(StringType msg, Args... args)
Definition: log.h:283
float read_short_ufixed()
Read a 8.8 fixed point unsigned value.
Definition: SWFStream.cpp:228
std::int16_t read_s16()
Read a aligned signed 16-bit value from the stream.
Definition: SWFStream.cpp:355
SWF::TagType open_tag()
Open an SWF tag and return it's type.
Definition: SWFStream.cpp:505
float read_fixed()
Read a 16.16 fixed point signed value.
Definition: SWFStream.cpp:208
A virtual IO channel.
Definition: IOChannel.h:43
Exception signalling an IO error.
Definition: IOChannel.h:35
std::uint32_t read_le32()
Read a 32-bit word from a little-endian stream. returning it as a native-endian word.
Definition: IOChannel.cpp:28
float read_short_sfixed()
Read a 8.8 fixed point signed value.
Definition: SWFStream.cpp:235
unsigned long tell()
Return our current (byte) position in the input stream.
Definition: SWFStream.cpp:447
std::int32_t read_s32()
Read a aligned signed 32-bit value from the stream.
Definition: SWFStream.cpp:388
std::uint32_t read_u32()
Read a aligned unsigned 32-bit value from the stream.
Definition: SWFStream.cpp:361
@ p
Definition: GnashKey.h:162
SWFStream(IOChannel *input)
Definition: SWFStream.cpp:36
An SWF parsing exception.
Definition: GnashException.h:90
void close_tag()
Seek to the end of the most-recently-opened tag.
Definition: SWFStream.cpp:582
unsigned long get_tag_end_position()
Return the file position of the end of the current tag.
Definition: SWFStream.cpp:497
#define IF_VERBOSE_PARSE(x)
Definition: log.h:378
void log_parse(StringType msg, Args... args)
Definition: log.h:313
float read_ufixed()
Read a 16.16 fixed point unsigned value.
Definition: SWFStream.cpp:219
@ f
Definition: GnashKey.h:152
std::uint16_t read_u16()
Read a aligned unsigned 16-bit value from the stream.
Definition: SWFStream.cpp:332
std::uint8_t read_byte()
Read a single byte from the stream.
Definition: IOChannel.cpp:63
@ c
Definition: GnashKey.h:149
#define DSOEXPORT
Definition: dsodefs.h:55
std::uint8_t read_u8()
Read a aligned unsigned 8-bit value from the stream.
Definition: SWFStream.cpp:319
~SWFStream()
Definition: SWFStream.cpp:45
bool read_bit()
Reads a single bit off the stream and returns it.
Definition: SWFStream.cpp:88
void skip_V32()
Skip a variable length unsigned 32-bit value in the stream. This is faster than doing the bitwise ari...
Definition: SWFStream.h:220
std::uint32_t read_V32()
Read a variable length unsigned 32-bit value from the stream. These values continue until either the ...
Definition: SWFStream.h:191
virtual void go_to_end()=0
Seek to the end of the stream.
virtual std::streampos tell() const =0
Return current stream position.
void read_string_with_length(std::string &to)
Reads a sized string into a provided std::string.
Definition: SWFStream.cpp:411
SWF stream wrapper class.
Definition: SWFStream.h:59
bool seek(unsigned long pos)
Set the file position to the given value (byte aligned)
Definition: SWFStream.cpp:456
void align()
Consume all bits of current byte.
Definition: SWFStream.h:135
void ensureBytes(unsigned long needed)
Ensure the requested number of bytes are available for an aligned read in the currently opened tag.
Definition: SWFStream.cpp:50
@ u
Definition: GnashKey.h:167
bool skip_bytes(unsigned num)
Discard given number of bytes.
Definition: SWFStream.h:345
SimpleBuffer data
Definition: LocalConnection_as.cpp:151
virtual std::streamsize read(void *dst, std::streamsize num)=0
Read the given number of bytes from the stream.