Displaying 15 results from an estimated 15 matches for "swfdec_bytes_check".
2007 Mar 28
0
3 commits - libswfdec/swfdec_bits.c libswfdec/swfdec_bits.h libswfdec/swfdec_sprite.c libswfdec/swfdec_tag.c
...+32,25 @@
#include "swfdec_rect.h"
+#define SWFDEC_BITS_CHECK(b,n) G_STMT_START { \
+ if (swfdec_bits_left(b) < (n)) { \
+ SWFDEC_ERROR ("reading past end of buffer"); \
+ b->ptr = b->end; \
+ b->idx = 0; \
+ return 0; \
+ } \
+}G_STMT_END
+#define SWFDEC_BYTES_CHECK(b,n) G_STMT_START { \
+ g_assert (b->end >= b->ptr); \
+ g_assert (b->idx == 0); \
+ if ((unsigned long) (b->end - b->ptr) < n) { \
+ SWFDEC_ERROR ("reading past end of buffer"); \
+ b->ptr = b->end; \
+ b->idx = 0; \
+ return 0; \
+ } \
+} G_...
2007 Jul 11
0
libswfdec/swfdec_bits.c
...don't access memory unaligned (fixes #11492)
Hopefully fixes it...
diff --git a/libswfdec/swfdec_bits.c b/libswfdec/swfdec_bits.c
index c8a5062..8ec6936 100644
--- a/libswfdec/swfdec_bits.c
+++ b/libswfdec/swfdec_bits.c
@@ -307,11 +307,9 @@ swfdec_bits_get_float (SwfdecBits * b)
SWFDEC_BYTES_CHECK (b, 4);
- conv.i = *((gint32 *) b->ptr);
+ conv.i = (b->ptr[3] << 24) | (b->ptr[2] << 16) | (b->ptr[1] << 8) | b->ptr[0];
b->ptr += 4;
- conv.i = GINT32_FROM_LE (conv.i);
-
return conv.f;
}
@@ -323,40 +321,30 @@ swfdec_bits_get_float (SwfdecBits *...
2007 Jul 11
0
Branch 'as' - 3 commits - libswfdec/swfdec_bits.c
...don't access memory unaligned (fixes #11492)
Hopefully fixes it...
diff --git a/libswfdec/swfdec_bits.c b/libswfdec/swfdec_bits.c
index c8a5062..8ec6936 100644
--- a/libswfdec/swfdec_bits.c
+++ b/libswfdec/swfdec_bits.c
@@ -307,11 +307,9 @@ swfdec_bits_get_float (SwfdecBits * b)
SWFDEC_BYTES_CHECK (b, 4);
- conv.i = *((gint32 *) b->ptr);
+ conv.i = (b->ptr[3] << 24) | (b->ptr[2] << 16) | (b->ptr[1] << 8) | b->ptr[0];
b->ptr += 4;
- conv.i = GINT32_FROM_LE (conv.i);
-
return conv.f;
}
@@ -323,40 +321,30 @@ swfdec_bits_get_float (SwfdecBits *...
2007 Mar 29
0
libswfdec-gtk/swfdec_playback_alsa.c libswfdec/swfdec_audio_event.h libswfdec/swfdec_audio_flv.h libswfdec/swfdec_audio_stream.h libswfdec/swfdec_bits.c libswfdec/swfdec_bits.h libswfdec/swfdec_buffer.c libswfdec/swfdec_buffer.h libswfdec/swfdec_cache.c
...cBits * b, un
}
int
-swfdec_bits_getsbits (SwfdecBits * b, unsigned int n)
+swfdec_bits_getsbits (SwfdecBits * b, guint n)
{
unsigned long r = 0;
@@ -198,7 +198,7 @@ swfdec_bits_getsbits (SwfdecBits * b, un
return r;
}
-unsigned int
+guint
swfdec_bits_peek_u8 (SwfdecBits * b)
{
SWFDEC_BYTES_CHECK (b, 1);
@@ -206,7 +206,7 @@ swfdec_bits_peek_u8 (SwfdecBits * b)
return *b->ptr;
}
-unsigned int
+guint
swfdec_bits_get_u8 (SwfdecBits * b)
{
SWFDEC_BYTES_CHECK (b, 1);
@@ -214,10 +214,10 @@ swfdec_bits_get_u8 (SwfdecBits * b)
return *b->ptr++;
}
-unsigned int
+guint
swfdec_...
2007 Mar 29
0
Branch 'as' - 9 commits - libswfdec-gtk/swfdec_playback_alsa.c libswfdec/js libswfdec/Makefile.am libswfdec/swfdec_as_context.c libswfdec/swfdec_as_context.h libswfdec/swfdec_as_frame.c libswfdec/swfdec_as_frame.h libswfdec/swfdec_as_function.c
...cBits * b, un
}
int
-swfdec_bits_getsbits (SwfdecBits * b, unsigned int n)
+swfdec_bits_getsbits (SwfdecBits * b, guint n)
{
unsigned long r = 0;
@@ -198,7 +198,7 @@ swfdec_bits_getsbits (SwfdecBits * b, un
return r;
}
-unsigned int
+guint
swfdec_bits_peek_u8 (SwfdecBits * b)
{
SWFDEC_BYTES_CHECK (b, 1);
@@ -206,7 +206,7 @@ swfdec_bits_peek_u8 (SwfdecBits * b)
return *b->ptr;
}
-unsigned int
+guint
swfdec_bits_get_u8 (SwfdecBits * b)
{
SWFDEC_BYTES_CHECK (b, 1);
@@ -214,10 +214,10 @@ swfdec_bits_get_u8 (SwfdecBits * b)
return *b->ptr++;
}
-unsigned int
+guint
swfdec_...
2007 Mar 20
0
2 commits - libswfdec/swfdec_bits.c libswfdec/swfdec_net_stream.c
...it a/libswfdec/swfdec_bits.c b/libswfdec/swfdec_bits.c
index e6a38ed..a90ba96 100644
--- a/libswfdec/swfdec_bits.c
+++ b/libswfdec/swfdec_bits.c
@@ -336,6 +336,7 @@ swfdec_bits_get_bdouble (SwfdecBits * b)
double d;
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
guint64 tmp;
+ gpointer p;
#endif
SWFDEC_BYTES_CHECK (b, 8);
@@ -345,7 +346,8 @@ swfdec_bits_get_bdouble (SwfdecBits * b)
#elif G_BYTE_ORDER == G_LITTLE_ENDIAN
tmp = *((guint64 *) b->ptr);
tmp = GUINT64_FROM_BE (tmp);
- d = *((double *) &tmp);
+ p = &tmp;
+ d = *((double *) p);
#endif
b->ptr += 8;
diff-tree 759af095e5718...
2007 Apr 26
0
4 commits - libswfdec/swfdec_bits.c libswfdec/swfdec_bits.h NEWS README
...guint
-swfdec_bits_peekbits (SwfdecBits * b, guint n)
+swfdec_bits_peekbits (const SwfdecBits * b, guint n)
{
SwfdecBits tmp = *b;
@@ -201,9 +201,12 @@ swfdec_bits_getsbits (SwfdecBits * b, gu
}
guint
-swfdec_bits_peek_u8 (SwfdecBits * b)
+swfdec_bits_peek_u8 (const SwfdecBits * b)
{
- SWFDEC_BYTES_CHECK (b, 1);
+ g_assert (b->idx == 0);
+ g_assert (b->ptr <= b->end);
+ if (b->ptr == b->end)
+ return 0;
return *b->ptr;
}
diff --git a/libswfdec/swfdec_bits.h b/libswfdec/swfdec_bits.h
index 9e14628..a86e705 100644
--- a/libswfdec/swfdec_bits.h
+++ b/libswfdec/swfdec_b...
2007 Mar 20
0
9 commits - configure.ac libswfdec/swfdec_bits.c libswfdec/swfdec_debug.c libswfdec/swfdec_js.c libswfdec/swfdec_script.c libswfdec/swfdec_sound.c
...- slight speed improvement for SWFDEC_BITS_CHECK_BYTES macro
diff --git a/libswfdec/swfdec_bits.c b/libswfdec/swfdec_bits.c
index 860d2c4..7327413 100644
--- a/libswfdec/swfdec_bits.c
+++ b/libswfdec/swfdec_bits.c
@@ -96,8 +96,16 @@ swfdec_bits_left (SwfdecBits *b)
} \
}G_STMT_END
#define SWFDEC_BYTES_CHECK(b,n) G_STMT_START { \
+ gulong __bytes; \
swfdec_bits_syncbits (b); \
- SWFDEC_BITS_CHECK (b, 8 * n); \
+ __bytes = b->end - b->ptr; \
+ if (!(__bytes > n || \
+ (__bytes == n && b->idx == 0))) { \
+ SWFDEC_ERROR ("reading past end of buffer"); \
+...
2007 Apr 17
0
15 commits - libswfdec/jpeg libswfdec/swfdec_bits.c libswfdec/swfdec_edittext.c libswfdec/swfdec_font.c libswfdec/swfdec_image.c libswfdec/swfdec_root_sprite.c libswfdec/swfdec_script.c libswfdec/swfdec_shape.c libswfdec/swfdec_sprite.c
...number of bytes to read
+ *
+ * Reads the next @len bytes into a string and validates it as UTF-8.
+ *
+ * Returns: a new string or %NULL on error
+ **/
char *
swfdec_bits_get_string_length (SwfdecBits * bits, guint len)
{
char *ret;
+ if (len == 0)
+ return g_strdup ("");
SWFDEC_BYTES_CHECK (bits, len);
ret = g_strndup ((char *) bits->ptr, len);
2007 Apr 17
0
Branch 'as' - 17 commits - libswfdec/jpeg libswfdec/swfdec_bits.c libswfdec/swfdec_font.c libswfdec/swfdec_image.c libswfdec/swfdec_root_sprite.c libswfdec/swfdec_script.c libswfdec/swfdec_shape.c libswfdec/swfdec_sound.c libswfdec/swfdec_sprite.c
...number of bytes to read
+ *
+ * Reads the next @len bytes into a string and validates it as UTF-8.
+ *
+ * Returns: a new string or %NULL on error
+ **/
char *
swfdec_bits_get_string_length (SwfdecBits * bits, guint len)
{
char *ret;
+ if (len == 0)
+ return g_strdup ("");
SWFDEC_BYTES_CHECK (bits, len);
ret = g_strndup ((char *) bits->ptr, len);
2007 Dec 10
0
5 commits - libswfdec/jpeg libswfdec/swfdec_as_interpret.c libswfdec/swfdec_bits.c libswfdec/swfdec_cached.c libswfdec/swfdec_codec_adpcm.c libswfdec/swfdec_codec_audio.c libswfdec/swfdec_flash_security.c libswfdec/swfdec_image.c
...at gnome.org>
Date: Mon Dec 10 22:36:08 2007 +0100
fix unaligned reads
diff --git a/libswfdec/swfdec_bits.c b/libswfdec/swfdec_bits.c
index edc79a8..5298012 100644
--- a/libswfdec/swfdec_bits.c
+++ b/libswfdec/swfdec_bits.c
@@ -359,9 +359,9 @@ swfdec_bits_get_bdouble (SwfdecBits * b)
SWFDEC_BYTES_CHECK (b, 8);
#if G_BYTE_ORDER == G_BIG_ENDIAN
- d = *((double *) b->ptr);
+ memcpy (&d, b->ptr, 8);
#elif G_BYTE_ORDER == G_LITTLE_ENDIAN
- tmp = *((guint64 *) b->ptr);
+ memcpy (&tmp, b->ptr, 8);
tmp = GUINT64_FROM_BE (tmp);
p = &tmp;
d = *((double *) p);
commit...
2007 Jan 22
0
Branch 'interpreter' - 3 commits - libswfdec/swfdec_bits.c libswfdec/swfdec_swf_decoder.c test/Makefile.am test/swfedit.c test/swfedit_file.c test/swfedit_file.h test/swfedit_tag.c test/swfedit_tag.h test/swfedit_token.c test/swfedit_token.h
...ength;
+ } else {
+ memset (bits, 0, sizeof (SwfdecBits));
+ }
}
/**
@@ -567,7 +578,7 @@ swfdec_bits_get_buffer (SwfdecBits *bits
{
SwfdecBuffer *buffer;
- g_return_val_if_fail (len > 0 || len == -1, NULL);
+ g_return_val_if_fail (len >= -1, NULL);
if (len > 0) {
SWFDEC_BYTES_CHECK (bits, (unsigned int) len);
@@ -575,9 +586,9 @@ swfdec_bits_get_buffer (SwfdecBits *bits
swfdec_bits_syncbits (bits);
len = bits->end - bits->ptr;
g_assert (len >= 0);
- if (len == 0)
- return NULL;
}
+ if (len == 0)
+ return NULL;
if (bits->buffer) {...
2007 Jun 06
0
Branch 'as' - 13 commits - libswfdec/swfdec_as_context.c libswfdec/swfdec_as_context.h libswfdec/swfdec_as_frame.c libswfdec/swfdec_as_frame.h libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h
...har *
-swfdec_bits_get_string (SwfdecBits * bits)
-{
- const char *s = swfdec_bits_skip_string (bits);
-
- return g_strdup (s);
-}
-
-const char *
+static const char *
swfdec_bits_skip_string (SwfdecBits *bits)
{
char *s;
const char *end;
guint len;
- swfdec_bits_syncbits (bits);
+ SWFDEC_BYTES_CHECK (bits, 1);
end = memchr (bits->ptr, 0, bits->end - bits->ptr);
if (end == NULL) {
SWFDEC_ERROR ("could not parse string");
@@ -495,15 +487,54 @@ swfdec_bits_skip_string (SwfdecBits *bit
len = end - (const char *) bits->ptr;
s = (char *) bits->ptr;
bits-&...
2007 Feb 13
0
9 commits - libswfdec/js libswfdec/swfdec_bits.c libswfdec/swfdec_bits.h libswfdec/swfdec_codec_screen.c libswfdec/swfdec_image.c libswfdec/swfdec_script.c test/Makefile.am test/swfdec_out.c test/swfdec_out.h test/swfedit.c test/swfedit_file.c
...z = { 0, };
+ SwfdecBuffer *buffer;
+ int result;
+
+ g_return_val_if_fail (bits != NULL, NULL);
+ g_return_val_if_fail (compressed >= -1, NULL);
+ g_return_val_if_fail (decompressed > 0 || decompressed == -1, NULL);
+
+ /* prepare the bits structure */
+ if (compressed > 0) {
+ SWFDEC_BYTES_CHECK (bits, (unsigned int) compressed);
+ } else {
+ swfdec_bits_syncbits (bits);
+ compressed = bits->end - bits->ptr;
+ g_assert (compressed >= 0);
+ }
+ if (compressed == 0)
+ return NULL;
+
+ z.zalloc = swfdec_bits_zalloc;
+ z.zfree = swfdec_bits_zfree;
+ z.opaque = NULL;...
2007 Feb 06
0
109 commits - configure.ac libswfdec/js libswfdec/Makefile.am libswfdec/swfdec_bits.c libswfdec/swfdec_bits.h libswfdec/swfdec_buffer.c libswfdec/swfdec_button_movie.c libswfdec/swfdec_codec_screen.c libswfdec/swfdec_color.c libswfdec/swfdec_color.h
...ength;
+ } else {
+ memset (bits, 0, sizeof (SwfdecBits));
+ }
}
/**
@@ -567,7 +578,7 @@ swfdec_bits_get_buffer (SwfdecBits *bits
{
SwfdecBuffer *buffer;
- g_return_val_if_fail (len > 0 || len == -1, NULL);
+ g_return_val_if_fail (len >= -1, NULL);
if (len > 0) {
SWFDEC_BYTES_CHECK (bits, (unsigned int) len);
@@ -575,9 +586,9 @@ swfdec_bits_get_buffer (SwfdecBits *bits
swfdec_bits_syncbits (bits);
len = bits->end - bits->ptr;
g_assert (len >= 0);
- if (len == 0)
- return NULL;
}
+ if (len == 0)
+ return NULL;
if (bits->buffer) {...