Benjamin Otte
2007-Apr-18 06:51 UTC
[Swfdec] 6 commits - libswfdec-gtk/swfdec_gtk_widget.c libswfdec/jpeg libswfdec/swfdec_image.c
libswfdec-gtk/swfdec_gtk_widget.c | 4 +- libswfdec/jpeg/jpeg.c | 55 ++++++++++++++++++++++---------------- libswfdec/jpeg/jpeg_rgb_decoder.c | 1 libswfdec/swfdec_image.c | 46 +++++++------------------------ 4 files changed, 47 insertions(+), 59 deletions(-) New commits: diff-tree a171b4ba49fbd8fa8addb521184fc9b2cde60e50 (from aefaca2f3c3d192c5e662a127036a9ced0139c43) Author: Benjamin Otte <otte@gnome.org> Date: Wed Apr 18 14:22:40 2007 +0200 now that the jpeg lib ignores SOI and EOI properly, there's no longer a need to do it here diff --git a/libswfdec/swfdec_image.c b/libswfdec/swfdec_image.c index 128506b..5a60681 100644 --- a/libswfdec/swfdec_image.c +++ b/libswfdec/swfdec_image.c @@ -140,47 +140,23 @@ swfdec_jpeg_decode_argb (unsigned char * unsigned char *data2, int length2, void *outdata, int *width, int *height) { - unsigned char *tmpdata; - int tmplength; gboolean ret; - while (length1 >= 2 && data1[0] == 0xff && - (data1[1] == 0xd9 || data1[1] == 0xd8)) { - data1 += 2; - length1 -= 2; - } - while (length1 >= 2 && data1[length1-2] == 0xff && - (data1[length1-1] == 0xd9 || data1[length1-1] == 0xd8)) { - length1 -= 2; - } - if (data2) { - while (length2 >= 2 && data2[0] == 0xff && - (data2[1] == 0xd9 || data2[1] == 0xd8)) { - data2 += 2; - length2 -= 2; - } - while (length2 >= 2 && data2[length2-2] == 0xff && - (data2[length2-1] == 0xd9 || data2[length2-1] == 0xd8)) { - length2 -= 2; - } - } else { - length2 = 0; - } - - tmplength = length1 + length2 + 4; - tmpdata = g_malloc (tmplength); + unsigned char *tmpdata; + int tmplength; - tmpdata[0] = 0xff; - tmpdata[1] = 0xd8; - memcpy (tmpdata + 2, data1, length1); - memcpy (tmpdata + 2 + length1, data2, length2); - tmpdata[2 + length1 + length2] = 0xff; - tmpdata[2 + length1 + length2 + 1] = 0xd9; + tmplength = length1 + length2; + tmpdata = g_malloc (tmplength); - ret = jpeg_decode_argb (tmpdata, tmplength, outdata, width, height); + memcpy (tmpdata, data1, length1); + memcpy (tmpdata + length1, data2, length2); + ret = jpeg_decode_argb (tmpdata, tmplength, outdata, width, height); - g_free(tmpdata); + g_free (tmpdata); + } else { + ret = jpeg_decode_argb (data1, length1, outdata, width, height); + } return ret; } diff-tree aefaca2f3c3d192c5e662a127036a9ced0139c43 (from ece06f4cdeb5ce268939bd1869968f6b17c9ea0c) Author: Benjamin Otte <otte@gnome.org> Date: Wed Apr 18 14:22:08 2007 +0200 add code to ignore SOI and EOI markers diff --git a/libswfdec/jpeg/jpeg.c b/libswfdec/jpeg/jpeg.c index b0de148..58dd755 100644 --- a/libswfdec/jpeg/jpeg.c +++ b/libswfdec/jpeg/jpeg.c @@ -543,6 +543,7 @@ jpeg_decoder_get_marker (JpegDecoder *de int a,b; JpegBits *bits = &dec->bits; +again: if (jpeg_bits_available(bits) < 2) { return FALSE; } @@ -557,6 +558,12 @@ jpeg_decoder_get_marker (JpegDecoder *de b = jpeg_bits_get_u8 (bits); } while (b == 0xff && jpeg_bits_error(bits)); + /* Flash seems to ignore SOI and EOI markers, so we do, too */ + if (b == JPEG_MARKER_SOI || + (b == JPEG_MARKER_EOI && jpeg_bits_available (bits) > 0)) { + goto again; + } + *marker = b; return TRUE; } @@ -580,6 +587,7 @@ jpeg_decoder_decode (JpegDecoder *dec) bits = &dec->bits; +#if 0 /* Note: The spec is ambiguous as to whether fill bytes can come * before the first marker. We'll assume yes. */ if (!jpeg_decoder_get_marker (dec, &marker)) { @@ -589,6 +597,7 @@ jpeg_decoder_decode (JpegDecoder *dec) jpeg_decoder_error(dec, "not a JPEG image"); return FALSE; } +#endif /* Interpret markers up to the start of frame */ while (!dec->error) { diff-tree ece06f4cdeb5ce268939bd1869968f6b17c9ea0c (from f5c204e01c3214748206d668bda81693091434e9) Author: Benjamin Otte <otte@gnome.org> Date: Wed Apr 18 13:46:26 2007 +0200 fix memleak diff --git a/libswfdec/jpeg/jpeg_rgb_decoder.c b/libswfdec/jpeg/jpeg_rgb_decoder.c index 2949751..e1dba8a 100644 --- a/libswfdec/jpeg/jpeg_rgb_decoder.c +++ b/libswfdec/jpeg/jpeg_rgb_decoder.c @@ -62,6 +62,7 @@ int jpeg_decode_argb (uint8_t *data, int jpeg_decoder_get_image_size (dec, width, height); *image = (uint32_t *)jpeg_decoder_get_argb_image (dec); + jpeg_decoder_free (dec); return TRUE; } diff-tree f5c204e01c3214748206d668bda81693091434e9 (from 34f141f73e3f5d263d9d089c95c79c5c1014f7ff) Author: Benjamin Otte <otte@gnome.org> Date: Wed Apr 18 13:46:10 2007 +0200 change jpeg_decoder_error so the SWFDEC_ERROR prints the correct line number diff --git a/libswfdec/jpeg/jpeg.c b/libswfdec/jpeg/jpeg.c index 62aa499..b0de148 100644 --- a/libswfdec/jpeg/jpeg.c +++ b/libswfdec/jpeg/jpeg.c @@ -21,8 +21,6 @@ extern uint8_t jpeg_standard_tables[]; extern int jpeg_standard_tables_size; -void jpeg_decoder_error(JpegDecoder *dec, char *fmt, ...); - void jpeg_decoder_define_huffman_tables (JpegDecoder * dec); void jpeg_decoder_define_arithmetic_conditioning (JpegDecoder *dec); void jpeg_decoder_define_quantization_tables (JpegDecoder *dec); @@ -41,6 +39,26 @@ static void jpeg_decoder_verify_header ( static void jpeg_decoder_init_decoder (JpegDecoder *dec); +static void +jpeg_decoder_error(JpegDecoder *dec, char *fmt, ...) +{ + va_list varargs; + + if (dec->error) return; + + dec->error_message = malloc(250); + va_start (varargs, fmt); + vsnprintf(dec->error_message, 250 - 1, fmt, varargs); + dec->error_message[250 - 1] = 0; + va_end (varargs); + + dec->error = TRUE; +} + +#define jpeg_decoder_error(dec, ...) { \ + SWFDEC_ERROR("decoder error: "__VA_ARGS__); \ + jpeg_decoder_error (dec, __VA_ARGS__); \ +} static void jpeg_decoder_verify_header (JpegDecoder *dec) @@ -519,23 +537,6 @@ jpeg_decoder_free (JpegDecoder * dec) free (dec); } -void -jpeg_decoder_error(JpegDecoder *dec, char *fmt, ...) -{ - va_list varargs; - - if (dec->error) return; - - dec->error_message = malloc(250); - va_start (varargs, fmt); - vsnprintf(dec->error_message, 250 - 1, fmt, varargs); - dec->error_message[250 - 1] = 0; - va_end (varargs); - - SWFDEC_ERROR("decoder error: %s", dec->error_message); - dec->error = TRUE; -} - int jpeg_decoder_get_marker (JpegDecoder *dec, int *marker) { diff-tree 34f141f73e3f5d263d9d089c95c79c5c1014f7ff (from e31c3c6bbd51cc4288915c6cc2a59dfabc761750) Author: Benjamin Otte <otte@gnome.org> Date: Wed Apr 18 13:43:30 2007 +0200 fix security problem with overreading available data diff --git a/libswfdec/jpeg/jpeg.c b/libswfdec/jpeg/jpeg.c index 0c648c2..62aa499 100644 --- a/libswfdec/jpeg/jpeg.c +++ b/libswfdec/jpeg/jpeg.c @@ -381,6 +381,7 @@ jpeg_decoder_decode_entropy_segment (Jpe short block2[64]; unsigned char *newptr; int len; + int maxlen; int j; int i; int go; @@ -389,11 +390,11 @@ jpeg_decoder_decode_entropy_segment (Jpe int ret; len = 0; + maxlen = jpeg_bits_available (bits) - 1; j = 0; - while (1) { - if (bits->ptr[len] == 0xff && bits->ptr[len + 1] != 0x00) { + while (len < maxlen) { + if (bits->ptr[len] == 0xff && bits->ptr[len + 1] != 0x00) break; - } len++; } SWFDEC_DEBUG ("entropy length = %d", len); diff-tree e31c3c6bbd51cc4288915c6cc2a59dfabc761750 (from 15ed4a69b4ffc265fe103ba79a0b60af7e42a9fa) Author: Benjamin Otte <otte@gnome.org> Date: Wed Apr 18 11:24:32 2007 +0200 query mouse cursor when widget _is_ interactive diff --git a/libswfdec-gtk/swfdec_gtk_widget.c b/libswfdec-gtk/swfdec_gtk_widget.c index dcd39a0..ec0244e 100644 --- a/libswfdec-gtk/swfdec_gtk_widget.c +++ b/libswfdec-gtk/swfdec_gtk_widget.c @@ -323,9 +323,9 @@ swfdec_gtk_widget_update_cursor (SwfdecG if (window == NULL) return; if (priv->interactive) - swfcursor = SWFDEC_MOUSE_CURSOR_NORMAL; - else g_object_get (priv->player, "mouse-cursor", &swfcursor, NULL); + else + swfcursor = SWFDEC_MOUSE_CURSOR_NORMAL; switch (swfcursor) { case SWFDEC_MOUSE_CURSOR_NONE:
Maybe Matching Threads
- 8 commits - configure.ac doc/Makefile.am libswfdec/jpeg libswfdec/swfdec_debug.h libswfdec/swfdec_image.c
- libswfdec/jpeg
- 12 commits - configure.ac doc/swfdec-sections.txt libswfdec-gtk/swfdec_playback_alsa.c libswfdec/jpeg libswfdec/Makefile.am libswfdec/swfdec_amf.c libswfdec/swfdec_as_array.c libswfdec/swfdec_as_boolean.h libswfdec/swfdec_as_context.c
- Red Hat 9 regex symbol conflict
- 15 commits - configure.ac doc/Makefile.am doc/swfdec-docs.sgml doc/swfdec-sections.txt doc/swfdec.types libswfdec-gtk/.gitignore libswfdec-gtk/Makefile.am libswfdec-gtk/swfdec-gtk.h libswfdec-gtk/swfdec_gtk_player.c libswfdec-gtk/swfdec_gtk_player.h