rev 384 - trunk
[email protected] Mon, 3 Jan 2005 20:53:17 -0800 (PST)
| Newsgroups | gmane.comp.printing.ghostscript.jbig2dec.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: giles
Date: 2005-01-03 20:53:16 -0800 (Mon, 03 Jan 2005)
New Revision: 384
Modified:
trunk/jbig2.c
trunk/jbig2_refinement.c
trunk/jbig2_segment.c
Log:
Properly free some segment results when the segment header structures=20
are freed. Symbol dictionaries are released, intermediate segment images=20
are released if they haven't already been released and nulled after=20
their use in the decode process, and metadata structures are properly=20
freed.
Resolves all known leaks with the first 7 ubc test streams.
Modified: trunk/jbig2.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/jbig2.c 2005-01-04 04:41:56 UTC (rev 383)
+++ trunk/jbig2.c 2005-01-04 04:53:16 UTC (rev 384)
@@ -1,7 +1,7 @@
/*
jbig2dec
=20
- Copyright (c) 2002-2003 artofcode LLC.
+ Copyright (c) 2002-2005 artofcode LLC.
=20
This software is provided AS-IS with no warranty,
either express or implied.
@@ -353,7 +353,7 @@
=20
jbig2_free(ca, ctx->buf);
if (ctx->segments !=3D NULL) {
- for (i =3D ctx->segment_index; i < ctx->n_segments; i++)
+ for (i =3D 0; i < ctx->n_segments; i++)
jbig2_free_segment(ctx, ctx->segments[i]);
jbig2_free(ca, ctx->segments);
}
Modified: trunk/jbig2_refinement.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/jbig2_refinement.c 2005-01-04 04:41:56 UTC (rev 383)
+++ trunk/jbig2_refinement.c 2005-01-04 04:53:16 UTC (rev 384)
@@ -319,7 +319,7 @@
}
=20
/**=20
- * Handler for immediate generic region segments
+ * Handler for generic refinement region segments
*/
int
jbig2_refinement_region(Jbig2Ctx *ctx, Jbig2Segment *segment,
Modified: trunk/jbig2_segment.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/jbig2_segment.c 2005-01-04 04:41:56 UTC (rev 383)
+++ trunk/jbig2_segment.c 2005-01-04 04:53:16 UTC (rev 384)
@@ -129,7 +129,24 @@
if (segment->referred_to_segments !=3D NULL) {
jbig2_free(ctx->allocator, segment->referred_to_segments);
}
- /* todo: free result */
+ /* todo: we need either some separate fields or
+ a more complex result object rather than this
+ brittle special casing */
+ switch (segment->flags & 63) {
+ case 0: /* symbol dictionary */
+ jbig2_sd_release(ctx, segment->result);
+ case 4: /* intermediate text region */
+ case 40: /* intermediate refinement region */
+ if (segment->result !=3D NULL)
+ jbig2_image_release(ctx, segment->result);
+ break;
+ case 62:
+ jbig2_metadata_free(ctx, segment->result);
+ break;
+ default:
+ /* anything is is probably an undefined pointer */
+ break;
+ }
jbig2_free (ctx->allocator, segment);
}
=20