Merge lp:~noskcaj/ubuntu/wily/libjpeg6b/merge into lp:ubuntu/wily/libjpeg6b

Proposed by Jackson Doak
Status: Rejected
Rejected by: Robert Ancell
Proposed branch: lp:~noskcaj/ubuntu/wily/libjpeg6b/merge
Merge into: lp:ubuntu/wily/libjpeg6b
Diff against target: 1762 lines (+115/-1508)
13 files modified
.pc/applied-patches (+1/-1)
.pc/fix-CVE-2013-6629_6630/jdmarker.c (+0/-1360)
README.6b1 (+0/-29)
README.6b2 (+42/-0)
configure.ac (+1/-1)
debian/changelog (+34/-0)
debian/control (+2/-2)
debian/copyright (+1/-1)
debian/patches/automake-Wno-obsolete (+19/-0)
debian/patches/fix-CVE-2013-6629_6630 (+0/-108)
debian/patches/series (+1/-1)
debian/rules (+11/-5)
jdmarker.c (+3/-0)
To merge this branch: bzr merge lp:~noskcaj/ubuntu/wily/libjpeg6b/merge
Reviewer Review Type Date Requested Status
Robert Ancell (community) Needs Information
Till Kamppeter Pending
Review via email: mp+265455@code.launchpad.net

Description of the change

Merge from debian

To post a comment you must log in.
Revision history for this message
Robert Ancell (robert-ancell) wrote :

I looked at the difference between Debian and Ubuntu and there's no -Bsymbolic flags set. Not sure how long ago that changed!

The difference is we drop:
LDFLAGS=-Wl,-z,relro

Which may not actually be a problem.

I think we need Till to tell us if the stock Debian package still has an issue with the HP printer drivers as that was the original issue that got us to diverge (bug 777670).

review: Needs Information
Revision history for this message
Till Kamppeter (till-kamppeter) wrote :

The actual fix for the mentioned bug is removing "-Bsymbolic-functions" from LDFLAGS. I do not know whether this was also done in Debian. I also never tested the Debian package. Also I do not have the appropriate printer any more.

So please check whether the Debian package also has "-Bsymbolic-functions" removed and make sure that Ubuntu ships a JPEG package with "-Bsymbolic-functions" removed.

Revision history for this message
Robert Ancell (robert-ancell) wrote :

OK, given that -Bsymbolic-functions is not in the Debian version I'm going to sync from Debian and we should diverge again if a printer issue turns up. Thanks for checking.

Unmerged revisions

20. By Jackson Doak

* Merge from Debian. Remaining changes:
  - debian/rules: Remove "-Bsymbolic-functions" from LDFLAGS.
* Bump epoch to recover from libjpeg-turbo hijacking of libjpeg62.
* debian/control:
  - Bump standard version to 3.9.6.
* New bugfix upstream release
  - patch fix-CVE-2013-6629_6630: removed
* debian/watch: added
* debian/rules:
  - Use dh_prep instead of dh_clean -k
  - Do not use -D_REENTRANT
  - Add -Wl,-z,relro to LDFLAGS
* debian/copyright:
  - Add new upstream URL
* debian/control:
  - Bump standard version to 3.9.5.
* debian/control, debian/rules:
  - Apply patch by Mauricio Faria de Oliveira to use dh_autoreconf
    closes: #753362

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.pc/applied-patches'
2--- .pc/applied-patches 2013-12-10 18:09:16 +0000
3+++ .pc/applied-patches 2015-07-21 20:52:57 +0000
4@@ -1,3 +1,3 @@
5 extern_C-jpeglib.h
6 use-autotools-dev
7-fix-CVE-2013-6629_6630
8+automake-Wno-obsolete
9
10=== removed directory '.pc/fix-CVE-2013-6629_6630'
11=== removed file '.pc/fix-CVE-2013-6629_6630/jdmarker.c'
12--- .pc/fix-CVE-2013-6629_6630/jdmarker.c 2013-12-05 23:43:52 +0000
13+++ .pc/fix-CVE-2013-6629_6630/jdmarker.c 1970-01-01 00:00:00 +0000
14@@ -1,1360 +0,0 @@
15-/*
16- * jdmarker.c
17- *
18- * Copyright (C) 1991-1998, Thomas G. Lane.
19- * This file is part of the Independent JPEG Group's software.
20- * For conditions of distribution and use, see the accompanying README file.
21- *
22- * This file contains routines to decode JPEG datastream markers.
23- * Most of the complexity arises from our desire to support input
24- * suspension: if not all of the data for a marker is available,
25- * we must exit back to the application. On resumption, we reprocess
26- * the marker.
27- */
28-
29-#define JPEG_INTERNALS
30-#include "jinclude.h"
31-#include "jpeglib.h"
32-
33-
34-typedef enum { /* JPEG marker codes */
35- M_SOF0 = 0xc0,
36- M_SOF1 = 0xc1,
37- M_SOF2 = 0xc2,
38- M_SOF3 = 0xc3,
39-
40- M_SOF5 = 0xc5,
41- M_SOF6 = 0xc6,
42- M_SOF7 = 0xc7,
43-
44- M_JPG = 0xc8,
45- M_SOF9 = 0xc9,
46- M_SOF10 = 0xca,
47- M_SOF11 = 0xcb,
48-
49- M_SOF13 = 0xcd,
50- M_SOF14 = 0xce,
51- M_SOF15 = 0xcf,
52-
53- M_DHT = 0xc4,
54-
55- M_DAC = 0xcc,
56-
57- M_RST0 = 0xd0,
58- M_RST1 = 0xd1,
59- M_RST2 = 0xd2,
60- M_RST3 = 0xd3,
61- M_RST4 = 0xd4,
62- M_RST5 = 0xd5,
63- M_RST6 = 0xd6,
64- M_RST7 = 0xd7,
65-
66- M_SOI = 0xd8,
67- M_EOI = 0xd9,
68- M_SOS = 0xda,
69- M_DQT = 0xdb,
70- M_DNL = 0xdc,
71- M_DRI = 0xdd,
72- M_DHP = 0xde,
73- M_EXP = 0xdf,
74-
75- M_APP0 = 0xe0,
76- M_APP1 = 0xe1,
77- M_APP2 = 0xe2,
78- M_APP3 = 0xe3,
79- M_APP4 = 0xe4,
80- M_APP5 = 0xe5,
81- M_APP6 = 0xe6,
82- M_APP7 = 0xe7,
83- M_APP8 = 0xe8,
84- M_APP9 = 0xe9,
85- M_APP10 = 0xea,
86- M_APP11 = 0xeb,
87- M_APP12 = 0xec,
88- M_APP13 = 0xed,
89- M_APP14 = 0xee,
90- M_APP15 = 0xef,
91-
92- M_JPG0 = 0xf0,
93- M_JPG13 = 0xfd,
94- M_COM = 0xfe,
95-
96- M_TEM = 0x01,
97-
98- M_ERROR = 0x100
99-} JPEG_MARKER;
100-
101-
102-/* Private state */
103-
104-typedef struct {
105- struct jpeg_marker_reader pub; /* public fields */
106-
107- /* Application-overridable marker processing methods */
108- jpeg_marker_parser_method process_COM;
109- jpeg_marker_parser_method process_APPn[16];
110-
111- /* Limit on marker data length to save for each marker type */
112- unsigned int length_limit_COM;
113- unsigned int length_limit_APPn[16];
114-
115- /* Status of COM/APPn marker saving */
116- jpeg_saved_marker_ptr cur_marker; /* NULL if not processing a marker */
117- unsigned int bytes_read; /* data bytes read so far in marker */
118- /* Note: cur_marker is not linked into marker_list until it's all read. */
119-} my_marker_reader;
120-
121-typedef my_marker_reader * my_marker_ptr;
122-
123-
124-/*
125- * Macros for fetching data from the data source module.
126- *
127- * At all times, cinfo->src->next_input_byte and ->bytes_in_buffer reflect
128- * the current restart point; we update them only when we have reached a
129- * suitable place to restart if a suspension occurs.
130- */
131-
132-/* Declare and initialize local copies of input pointer/count */
133-#define INPUT_VARS(cinfo) \
134- struct jpeg_source_mgr * datasrc = (cinfo)->src; \
135- const JOCTET * next_input_byte = datasrc->next_input_byte; \
136- size_t bytes_in_buffer = datasrc->bytes_in_buffer
137-
138-/* Unload the local copies --- do this only at a restart boundary */
139-#define INPUT_SYNC(cinfo) \
140- ( datasrc->next_input_byte = next_input_byte, \
141- datasrc->bytes_in_buffer = bytes_in_buffer )
142-
143-/* Reload the local copies --- used only in MAKE_BYTE_AVAIL */
144-#define INPUT_RELOAD(cinfo) \
145- ( next_input_byte = datasrc->next_input_byte, \
146- bytes_in_buffer = datasrc->bytes_in_buffer )
147-
148-/* Internal macro for INPUT_BYTE and INPUT_2BYTES: make a byte available.
149- * Note we do *not* do INPUT_SYNC before calling fill_input_buffer,
150- * but we must reload the local copies after a successful fill.
151- */
152-#define MAKE_BYTE_AVAIL(cinfo,action) \
153- if (bytes_in_buffer == 0) { \
154- if (! (*datasrc->fill_input_buffer) (cinfo)) \
155- { action; } \
156- INPUT_RELOAD(cinfo); \
157- }
158-
159-/* Read a byte into variable V.
160- * If must suspend, take the specified action (typically "return FALSE").
161- */
162-#define INPUT_BYTE(cinfo,V,action) \
163- MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \
164- bytes_in_buffer--; \
165- V = GETJOCTET(*next_input_byte++); )
166-
167-/* As above, but read two bytes interpreted as an unsigned 16-bit integer.
168- * V should be declared unsigned int or perhaps INT32.
169- */
170-#define INPUT_2BYTES(cinfo,V,action) \
171- MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \
172- bytes_in_buffer--; \
173- V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \
174- MAKE_BYTE_AVAIL(cinfo,action); \
175- bytes_in_buffer--; \
176- V += GETJOCTET(*next_input_byte++); )
177-
178-
179-/*
180- * Routines to process JPEG markers.
181- *
182- * Entry condition: JPEG marker itself has been read and its code saved
183- * in cinfo->unread_marker; input restart point is just after the marker.
184- *
185- * Exit: if return TRUE, have read and processed any parameters, and have
186- * updated the restart point to point after the parameters.
187- * If return FALSE, was forced to suspend before reaching end of
188- * marker parameters; restart point has not been moved. Same routine
189- * will be called again after application supplies more input data.
190- *
191- * This approach to suspension assumes that all of a marker's parameters
192- * can fit into a single input bufferload. This should hold for "normal"
193- * markers. Some COM/APPn markers might have large parameter segments
194- * that might not fit. If we are simply dropping such a marker, we use
195- * skip_input_data to get past it, and thereby put the problem on the
196- * source manager's shoulders. If we are saving the marker's contents
197- * into memory, we use a slightly different convention: when forced to
198- * suspend, the marker processor updates the restart point to the end of
199- * what it's consumed (ie, the end of the buffer) before returning FALSE.
200- * On resumption, cinfo->unread_marker still contains the marker code,
201- * but the data source will point to the next chunk of marker data.
202- * The marker processor must retain internal state to deal with this.
203- *
204- * Note that we don't bother to avoid duplicate trace messages if a
205- * suspension occurs within marker parameters. Other side effects
206- * require more care.
207- */
208-
209-
210-LOCAL(boolean)
211-get_soi (j_decompress_ptr cinfo)
212-/* Process an SOI marker */
213-{
214- int i;
215-
216- TRACEMS(cinfo, 1, JTRC_SOI);
217-
218- if (cinfo->marker->saw_SOI)
219- ERREXIT(cinfo, JERR_SOI_DUPLICATE);
220-
221- /* Reset all parameters that are defined to be reset by SOI */
222-
223- for (i = 0; i < NUM_ARITH_TBLS; i++) {
224- cinfo->arith_dc_L[i] = 0;
225- cinfo->arith_dc_U[i] = 1;
226- cinfo->arith_ac_K[i] = 5;
227- }
228- cinfo->restart_interval = 0;
229-
230- /* Set initial assumptions for colorspace etc */
231-
232- cinfo->jpeg_color_space = JCS_UNKNOWN;
233- cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */
234-
235- cinfo->saw_JFIF_marker = FALSE;
236- cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */
237- cinfo->JFIF_minor_version = 1;
238- cinfo->density_unit = 0;
239- cinfo->X_density = 1;
240- cinfo->Y_density = 1;
241- cinfo->saw_Adobe_marker = FALSE;
242- cinfo->Adobe_transform = 0;
243-
244- cinfo->marker->saw_SOI = TRUE;
245-
246- return TRUE;
247-}
248-
249-
250-LOCAL(boolean)
251-get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith)
252-/* Process a SOFn marker */
253-{
254- INT32 length;
255- int c, ci;
256- jpeg_component_info * compptr;
257- INPUT_VARS(cinfo);
258-
259- cinfo->progressive_mode = is_prog;
260- cinfo->arith_code = is_arith;
261-
262- INPUT_2BYTES(cinfo, length, return FALSE);
263-
264- INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE);
265- INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE);
266- INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE);
267- INPUT_BYTE(cinfo, cinfo->num_components, return FALSE);
268-
269- length -= 8;
270-
271- TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker,
272- (int) cinfo->image_width, (int) cinfo->image_height,
273- cinfo->num_components);
274-
275- if (cinfo->marker->saw_SOF)
276- ERREXIT(cinfo, JERR_SOF_DUPLICATE);
277-
278- /* We don't support files in which the image height is initially specified */
279- /* as 0 and is later redefined by DNL. As long as we have to check that, */
280- /* might as well have a general sanity check. */
281- if (cinfo->image_height <= 0 || cinfo->image_width <= 0
282- || cinfo->num_components <= 0)
283- ERREXIT(cinfo, JERR_EMPTY_IMAGE);
284-
285- if (length != (cinfo->num_components * 3))
286- ERREXIT(cinfo, JERR_BAD_LENGTH);
287-
288- if (cinfo->comp_info == NULL) /* do only once, even if suspend */
289- cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small)
290- ((j_common_ptr) cinfo, JPOOL_IMAGE,
291- cinfo->num_components * SIZEOF(jpeg_component_info));
292-
293- for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
294- ci++, compptr++) {
295- compptr->component_index = ci;
296- INPUT_BYTE(cinfo, compptr->component_id, return FALSE);
297- INPUT_BYTE(cinfo, c, return FALSE);
298- compptr->h_samp_factor = (c >> 4) & 15;
299- compptr->v_samp_factor = (c ) & 15;
300- INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE);
301-
302- TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT,
303- compptr->component_id, compptr->h_samp_factor,
304- compptr->v_samp_factor, compptr->quant_tbl_no);
305- }
306-
307- cinfo->marker->saw_SOF = TRUE;
308-
309- INPUT_SYNC(cinfo);
310- return TRUE;
311-}
312-
313-
314-LOCAL(boolean)
315-get_sos (j_decompress_ptr cinfo)
316-/* Process a SOS marker */
317-{
318- INT32 length;
319- int i, ci, n, c, cc;
320- jpeg_component_info * compptr;
321- INPUT_VARS(cinfo);
322-
323- if (! cinfo->marker->saw_SOF)
324- ERREXIT(cinfo, JERR_SOS_NO_SOF);
325-
326- INPUT_2BYTES(cinfo, length, return FALSE);
327-
328- INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */
329-
330- TRACEMS1(cinfo, 1, JTRC_SOS, n);
331-
332- if (length != (n * 2 + 6) || n < 1 || n > MAX_COMPS_IN_SCAN)
333- ERREXIT(cinfo, JERR_BAD_LENGTH);
334-
335- cinfo->comps_in_scan = n;
336-
337- /* Collect the component-spec parameters */
338-
339- for (i = 0; i < n; i++) {
340- INPUT_BYTE(cinfo, cc, return FALSE);
341- INPUT_BYTE(cinfo, c, return FALSE);
342-
343- for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
344- ci++, compptr++) {
345- if (cc == compptr->component_id)
346- goto id_found;
347- }
348-
349- ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc);
350-
351- id_found:
352-
353- cinfo->cur_comp_info[i] = compptr;
354- compptr->dc_tbl_no = (c >> 4) & 15;
355- compptr->ac_tbl_no = (c ) & 15;
356-
357- TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc,
358- compptr->dc_tbl_no, compptr->ac_tbl_no);
359- }
360-
361- /* Collect the additional scan parameters Ss, Se, Ah/Al. */
362- INPUT_BYTE(cinfo, c, return FALSE);
363- cinfo->Ss = c;
364- INPUT_BYTE(cinfo, c, return FALSE);
365- cinfo->Se = c;
366- INPUT_BYTE(cinfo, c, return FALSE);
367- cinfo->Ah = (c >> 4) & 15;
368- cinfo->Al = (c ) & 15;
369-
370- TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se,
371- cinfo->Ah, cinfo->Al);
372-
373- /* Prepare to scan data & restart markers */
374- cinfo->marker->next_restart_num = 0;
375-
376- /* Count another SOS marker */
377- cinfo->input_scan_number++;
378-
379- INPUT_SYNC(cinfo);
380- return TRUE;
381-}
382-
383-
384-#ifdef D_ARITH_CODING_SUPPORTED
385-
386-LOCAL(boolean)
387-get_dac (j_decompress_ptr cinfo)
388-/* Process a DAC marker */
389-{
390- INT32 length;
391- int index, val;
392- INPUT_VARS(cinfo);
393-
394- INPUT_2BYTES(cinfo, length, return FALSE);
395- length -= 2;
396-
397- while (length > 0) {
398- INPUT_BYTE(cinfo, index, return FALSE);
399- INPUT_BYTE(cinfo, val, return FALSE);
400-
401- length -= 2;
402-
403- TRACEMS2(cinfo, 1, JTRC_DAC, index, val);
404-
405- if (index < 0 || index >= (2*NUM_ARITH_TBLS))
406- ERREXIT1(cinfo, JERR_DAC_INDEX, index);
407-
408- if (index >= NUM_ARITH_TBLS) { /* define AC table */
409- cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val;
410- } else { /* define DC table */
411- cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F);
412- cinfo->arith_dc_U[index] = (UINT8) (val >> 4);
413- if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index])
414- ERREXIT1(cinfo, JERR_DAC_VALUE, val);
415- }
416- }
417-
418- if (length != 0)
419- ERREXIT(cinfo, JERR_BAD_LENGTH);
420-
421- INPUT_SYNC(cinfo);
422- return TRUE;
423-}
424-
425-#else /* ! D_ARITH_CODING_SUPPORTED */
426-
427-#define get_dac(cinfo) skip_variable(cinfo)
428-
429-#endif /* D_ARITH_CODING_SUPPORTED */
430-
431-
432-LOCAL(boolean)
433-get_dht (j_decompress_ptr cinfo)
434-/* Process a DHT marker */
435-{
436- INT32 length;
437- UINT8 bits[17];
438- UINT8 huffval[256];
439- int i, index, count;
440- JHUFF_TBL **htblptr;
441- INPUT_VARS(cinfo);
442-
443- INPUT_2BYTES(cinfo, length, return FALSE);
444- length -= 2;
445-
446- while (length > 16) {
447- INPUT_BYTE(cinfo, index, return FALSE);
448-
449- TRACEMS1(cinfo, 1, JTRC_DHT, index);
450-
451- bits[0] = 0;
452- count = 0;
453- for (i = 1; i <= 16; i++) {
454- INPUT_BYTE(cinfo, bits[i], return FALSE);
455- count += bits[i];
456- }
457-
458- length -= 1 + 16;
459-
460- TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
461- bits[1], bits[2], bits[3], bits[4],
462- bits[5], bits[6], bits[7], bits[8]);
463- TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
464- bits[9], bits[10], bits[11], bits[12],
465- bits[13], bits[14], bits[15], bits[16]);
466-
467- /* Here we just do minimal validation of the counts to avoid walking
468- * off the end of our table space. jdhuff.c will check more carefully.
469- */
470- if (count > 256 || ((INT32) count) > length)
471- ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
472-
473- for (i = 0; i < count; i++)
474- INPUT_BYTE(cinfo, huffval[i], return FALSE);
475-
476- length -= count;
477-
478- if (index & 0x10) { /* AC table definition */
479- index -= 0x10;
480- htblptr = &cinfo->ac_huff_tbl_ptrs[index];
481- } else { /* DC table definition */
482- htblptr = &cinfo->dc_huff_tbl_ptrs[index];
483- }
484-
485- if (index < 0 || index >= NUM_HUFF_TBLS)
486- ERREXIT1(cinfo, JERR_DHT_INDEX, index);
487-
488- if (*htblptr == NULL)
489- *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
490-
491- MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits));
492- MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval));
493- }
494-
495- if (length != 0)
496- ERREXIT(cinfo, JERR_BAD_LENGTH);
497-
498- INPUT_SYNC(cinfo);
499- return TRUE;
500-}
501-
502-
503-LOCAL(boolean)
504-get_dqt (j_decompress_ptr cinfo)
505-/* Process a DQT marker */
506-{
507- INT32 length;
508- int n, i, prec;
509- unsigned int tmp;
510- JQUANT_TBL *quant_ptr;
511- INPUT_VARS(cinfo);
512-
513- INPUT_2BYTES(cinfo, length, return FALSE);
514- length -= 2;
515-
516- while (length > 0) {
517- INPUT_BYTE(cinfo, n, return FALSE);
518- prec = n >> 4;
519- n &= 0x0F;
520-
521- TRACEMS2(cinfo, 1, JTRC_DQT, n, prec);
522-
523- if (n >= NUM_QUANT_TBLS)
524- ERREXIT1(cinfo, JERR_DQT_INDEX, n);
525-
526- if (cinfo->quant_tbl_ptrs[n] == NULL)
527- cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo);
528- quant_ptr = cinfo->quant_tbl_ptrs[n];
529-
530- for (i = 0; i < DCTSIZE2; i++) {
531- if (prec)
532- INPUT_2BYTES(cinfo, tmp, return FALSE);
533- else
534- INPUT_BYTE(cinfo, tmp, return FALSE);
535- /* We convert the zigzag-order table to natural array order. */
536- quant_ptr->quantval[jpeg_natural_order[i]] = (UINT16) tmp;
537- }
538-
539- if (cinfo->err->trace_level >= 2) {
540- for (i = 0; i < DCTSIZE2; i += 8) {
541- TRACEMS8(cinfo, 2, JTRC_QUANTVALS,
542- quant_ptr->quantval[i], quant_ptr->quantval[i+1],
543- quant_ptr->quantval[i+2], quant_ptr->quantval[i+3],
544- quant_ptr->quantval[i+4], quant_ptr->quantval[i+5],
545- quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]);
546- }
547- }
548-
549- length -= DCTSIZE2+1;
550- if (prec) length -= DCTSIZE2;
551- }
552-
553- if (length != 0)
554- ERREXIT(cinfo, JERR_BAD_LENGTH);
555-
556- INPUT_SYNC(cinfo);
557- return TRUE;
558-}
559-
560-
561-LOCAL(boolean)
562-get_dri (j_decompress_ptr cinfo)
563-/* Process a DRI marker */
564-{
565- INT32 length;
566- unsigned int tmp;
567- INPUT_VARS(cinfo);
568-
569- INPUT_2BYTES(cinfo, length, return FALSE);
570-
571- if (length != 4)
572- ERREXIT(cinfo, JERR_BAD_LENGTH);
573-
574- INPUT_2BYTES(cinfo, tmp, return FALSE);
575-
576- TRACEMS1(cinfo, 1, JTRC_DRI, tmp);
577-
578- cinfo->restart_interval = tmp;
579-
580- INPUT_SYNC(cinfo);
581- return TRUE;
582-}
583-
584-
585-/*
586- * Routines for processing APPn and COM markers.
587- * These are either saved in memory or discarded, per application request.
588- * APP0 and APP14 are specially checked to see if they are
589- * JFIF and Adobe markers, respectively.
590- */
591-
592-#define APP0_DATA_LEN 14 /* Length of interesting data in APP0 */
593-#define APP14_DATA_LEN 12 /* Length of interesting data in APP14 */
594-#define APPN_DATA_LEN 14 /* Must be the largest of the above!! */
595-
596-
597-LOCAL(void)
598-examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data,
599- unsigned int datalen, INT32 remaining)
600-/* Examine first few bytes from an APP0.
601- * Take appropriate action if it is a JFIF marker.
602- * datalen is # of bytes at data[], remaining is length of rest of marker data.
603- */
604-{
605- INT32 totallen = (INT32) datalen + remaining;
606-
607- if (datalen >= APP0_DATA_LEN &&
608- GETJOCTET(data[0]) == 0x4A &&
609- GETJOCTET(data[1]) == 0x46 &&
610- GETJOCTET(data[2]) == 0x49 &&
611- GETJOCTET(data[3]) == 0x46 &&
612- GETJOCTET(data[4]) == 0) {
613- /* Found JFIF APP0 marker: save info */
614- cinfo->saw_JFIF_marker = TRUE;
615- cinfo->JFIF_major_version = GETJOCTET(data[5]);
616- cinfo->JFIF_minor_version = GETJOCTET(data[6]);
617- cinfo->density_unit = GETJOCTET(data[7]);
618- cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]);
619- cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]);
620- /* Check version.
621- * Major version must be 1, anything else signals an incompatible change.
622- * (We used to treat this as an error, but now it's a nonfatal warning,
623- * because some bozo at Hijaak couldn't read the spec.)
624- * Minor version should be 0..2, but process anyway if newer.
625- */
626- if (cinfo->JFIF_major_version != 1)
627- WARNMS2(cinfo, JWRN_JFIF_MAJOR,
628- cinfo->JFIF_major_version, cinfo->JFIF_minor_version);
629- /* Generate trace messages */
630- TRACEMS5(cinfo, 1, JTRC_JFIF,
631- cinfo->JFIF_major_version, cinfo->JFIF_minor_version,
632- cinfo->X_density, cinfo->Y_density, cinfo->density_unit);
633- /* Validate thumbnail dimensions and issue appropriate messages */
634- if (GETJOCTET(data[12]) | GETJOCTET(data[13]))
635- TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL,
636- GETJOCTET(data[12]), GETJOCTET(data[13]));
637- totallen -= APP0_DATA_LEN;
638- if (totallen !=
639- ((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3))
640- TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen);
641- } else if (datalen >= 6 &&
642- GETJOCTET(data[0]) == 0x4A &&
643- GETJOCTET(data[1]) == 0x46 &&
644- GETJOCTET(data[2]) == 0x58 &&
645- GETJOCTET(data[3]) == 0x58 &&
646- GETJOCTET(data[4]) == 0) {
647- /* Found JFIF "JFXX" extension APP0 marker */
648- /* The library doesn't actually do anything with these,
649- * but we try to produce a helpful trace message.
650- */
651- switch (GETJOCTET(data[5])) {
652- case 0x10:
653- TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen);
654- break;
655- case 0x11:
656- TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen);
657- break;
658- case 0x13:
659- TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen);
660- break;
661- default:
662- TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION,
663- GETJOCTET(data[5]), (int) totallen);
664- break;
665- }
666- } else {
667- /* Start of APP0 does not match "JFIF" or "JFXX", or too short */
668- TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen);
669- }
670-}
671-
672-
673-LOCAL(void)
674-examine_app14 (j_decompress_ptr cinfo, JOCTET FAR * data,
675- unsigned int datalen, INT32 remaining)
676-/* Examine first few bytes from an APP14.
677- * Take appropriate action if it is an Adobe marker.
678- * datalen is # of bytes at data[], remaining is length of rest of marker data.
679- */
680-{
681- unsigned int version, flags0, flags1, transform;
682-
683- if (datalen >= APP14_DATA_LEN &&
684- GETJOCTET(data[0]) == 0x41 &&
685- GETJOCTET(data[1]) == 0x64 &&
686- GETJOCTET(data[2]) == 0x6F &&
687- GETJOCTET(data[3]) == 0x62 &&
688- GETJOCTET(data[4]) == 0x65) {
689- /* Found Adobe APP14 marker */
690- version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]);
691- flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]);
692- flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]);
693- transform = GETJOCTET(data[11]);
694- TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform);
695- cinfo->saw_Adobe_marker = TRUE;
696- cinfo->Adobe_transform = (UINT8) transform;
697- } else {
698- /* Start of APP14 does not match "Adobe", or too short */
699- TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining));
700- }
701-}
702-
703-
704-METHODDEF(boolean)
705-get_interesting_appn (j_decompress_ptr cinfo)
706-/* Process an APP0 or APP14 marker without saving it */
707-{
708- INT32 length;
709- JOCTET b[APPN_DATA_LEN];
710- unsigned int i, numtoread;
711- INPUT_VARS(cinfo);
712-
713- INPUT_2BYTES(cinfo, length, return FALSE);
714- length -= 2;
715-
716- /* get the interesting part of the marker data */
717- if (length >= APPN_DATA_LEN)
718- numtoread = APPN_DATA_LEN;
719- else if (length > 0)
720- numtoread = (unsigned int) length;
721- else
722- numtoread = 0;
723- for (i = 0; i < numtoread; i++)
724- INPUT_BYTE(cinfo, b[i], return FALSE);
725- length -= numtoread;
726-
727- /* process it */
728- switch (cinfo->unread_marker) {
729- case M_APP0:
730- examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length);
731- break;
732- case M_APP14:
733- examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length);
734- break;
735- default:
736- /* can't get here unless jpeg_save_markers chooses wrong processor */
737- ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
738- break;
739- }
740-
741- /* skip any remaining data -- could be lots */
742- INPUT_SYNC(cinfo);
743- if (length > 0)
744- (*cinfo->src->skip_input_data) (cinfo, (long) length);
745-
746- return TRUE;
747-}
748-
749-
750-#ifdef SAVE_MARKERS_SUPPORTED
751-
752-METHODDEF(boolean)
753-save_marker (j_decompress_ptr cinfo)
754-/* Save an APPn or COM marker into the marker list */
755-{
756- my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
757- jpeg_saved_marker_ptr cur_marker = marker->cur_marker;
758- unsigned int bytes_read, data_length;
759- JOCTET FAR * data;
760- INT32 length = 0;
761- INPUT_VARS(cinfo);
762-
763- if (cur_marker == NULL) {
764- /* begin reading a marker */
765- INPUT_2BYTES(cinfo, length, return FALSE);
766- length -= 2;
767- if (length >= 0) { /* watch out for bogus length word */
768- /* figure out how much we want to save */
769- unsigned int limit;
770- if (cinfo->unread_marker == (int) M_COM)
771- limit = marker->length_limit_COM;
772- else
773- limit = marker->length_limit_APPn[cinfo->unread_marker - (int) M_APP0];
774- if ((unsigned int) length < limit)
775- limit = (unsigned int) length;
776- /* allocate and initialize the marker item */
777- cur_marker = (jpeg_saved_marker_ptr)
778- (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
779- SIZEOF(struct jpeg_marker_struct) + limit);
780- cur_marker->next = NULL;
781- cur_marker->marker = (UINT8) cinfo->unread_marker;
782- cur_marker->original_length = (unsigned int) length;
783- cur_marker->data_length = limit;
784- /* data area is just beyond the jpeg_marker_struct */
785- data = cur_marker->data = (JOCTET FAR *) (cur_marker + 1);
786- marker->cur_marker = cur_marker;
787- marker->bytes_read = 0;
788- bytes_read = 0;
789- data_length = limit;
790- } else {
791- /* deal with bogus length word */
792- bytes_read = data_length = 0;
793- data = NULL;
794- }
795- } else {
796- /* resume reading a marker */
797- bytes_read = marker->bytes_read;
798- data_length = cur_marker->data_length;
799- data = cur_marker->data + bytes_read;
800- }
801-
802- while (bytes_read < data_length) {
803- INPUT_SYNC(cinfo); /* move the restart point to here */
804- marker->bytes_read = bytes_read;
805- /* If there's not at least one byte in buffer, suspend */
806- MAKE_BYTE_AVAIL(cinfo, return FALSE);
807- /* Copy bytes with reasonable rapidity */
808- while (bytes_read < data_length && bytes_in_buffer > 0) {
809- *data++ = *next_input_byte++;
810- bytes_in_buffer--;
811- bytes_read++;
812- }
813- }
814-
815- /* Done reading what we want to read */
816- if (cur_marker != NULL) { /* will be NULL if bogus length word */
817- /* Add new marker to end of list */
818- if (cinfo->marker_list == NULL) {
819- cinfo->marker_list = cur_marker;
820- } else {
821- jpeg_saved_marker_ptr prev = cinfo->marker_list;
822- while (prev->next != NULL)
823- prev = prev->next;
824- prev->next = cur_marker;
825- }
826- /* Reset pointer & calc remaining data length */
827- data = cur_marker->data;
828- length = cur_marker->original_length - data_length;
829- }
830- /* Reset to initial state for next marker */
831- marker->cur_marker = NULL;
832-
833- /* Process the marker if interesting; else just make a generic trace msg */
834- switch (cinfo->unread_marker) {
835- case M_APP0:
836- examine_app0(cinfo, data, data_length, length);
837- break;
838- case M_APP14:
839- examine_app14(cinfo, data, data_length, length);
840- break;
841- default:
842- TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker,
843- (int) (data_length + length));
844- break;
845- }
846-
847- /* skip any remaining data -- could be lots */
848- INPUT_SYNC(cinfo); /* do before skip_input_data */
849- if (length > 0)
850- (*cinfo->src->skip_input_data) (cinfo, (long) length);
851-
852- return TRUE;
853-}
854-
855-#endif /* SAVE_MARKERS_SUPPORTED */
856-
857-
858-METHODDEF(boolean)
859-skip_variable (j_decompress_ptr cinfo)
860-/* Skip over an unknown or uninteresting variable-length marker */
861-{
862- INT32 length;
863- INPUT_VARS(cinfo);
864-
865- INPUT_2BYTES(cinfo, length, return FALSE);
866- length -= 2;
867-
868- TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length);
869-
870- INPUT_SYNC(cinfo); /* do before skip_input_data */
871- if (length > 0)
872- (*cinfo->src->skip_input_data) (cinfo, (long) length);
873-
874- return TRUE;
875-}
876-
877-
878-/*
879- * Find the next JPEG marker, save it in cinfo->unread_marker.
880- * Returns FALSE if had to suspend before reaching a marker;
881- * in that case cinfo->unread_marker is unchanged.
882- *
883- * Note that the result might not be a valid marker code,
884- * but it will never be 0 or FF.
885- */
886-
887-LOCAL(boolean)
888-next_marker (j_decompress_ptr cinfo)
889-{
890- int c;
891- INPUT_VARS(cinfo);
892-
893- for (;;) {
894- INPUT_BYTE(cinfo, c, return FALSE);
895- /* Skip any non-FF bytes.
896- * This may look a bit inefficient, but it will not occur in a valid file.
897- * We sync after each discarded byte so that a suspending data source
898- * can discard the byte from its buffer.
899- */
900- while (c != 0xFF) {
901- cinfo->marker->discarded_bytes++;
902- INPUT_SYNC(cinfo);
903- INPUT_BYTE(cinfo, c, return FALSE);
904- }
905- /* This loop swallows any duplicate FF bytes. Extra FFs are legal as
906- * pad bytes, so don't count them in discarded_bytes. We assume there
907- * will not be so many consecutive FF bytes as to overflow a suspending
908- * data source's input buffer.
909- */
910- do {
911- INPUT_BYTE(cinfo, c, return FALSE);
912- } while (c == 0xFF);
913- if (c != 0)
914- break; /* found a valid marker, exit loop */
915- /* Reach here if we found a stuffed-zero data sequence (FF/00).
916- * Discard it and loop back to try again.
917- */
918- cinfo->marker->discarded_bytes += 2;
919- INPUT_SYNC(cinfo);
920- }
921-
922- if (cinfo->marker->discarded_bytes != 0) {
923- WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c);
924- cinfo->marker->discarded_bytes = 0;
925- }
926-
927- cinfo->unread_marker = c;
928-
929- INPUT_SYNC(cinfo);
930- return TRUE;
931-}
932-
933-
934-LOCAL(boolean)
935-first_marker (j_decompress_ptr cinfo)
936-/* Like next_marker, but used to obtain the initial SOI marker. */
937-/* For this marker, we do not allow preceding garbage or fill; otherwise,
938- * we might well scan an entire input file before realizing it ain't JPEG.
939- * If an application wants to process non-JFIF files, it must seek to the
940- * SOI before calling the JPEG library.
941- */
942-{
943- int c, c2;
944- INPUT_VARS(cinfo);
945-
946- INPUT_BYTE(cinfo, c, return FALSE);
947- INPUT_BYTE(cinfo, c2, return FALSE);
948- if (c != 0xFF || c2 != (int) M_SOI)
949- ERREXIT2(cinfo, JERR_NO_SOI, c, c2);
950-
951- cinfo->unread_marker = c2;
952-
953- INPUT_SYNC(cinfo);
954- return TRUE;
955-}
956-
957-
958-/*
959- * Read markers until SOS or EOI.
960- *
961- * Returns same codes as are defined for jpeg_consume_input:
962- * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
963- */
964-
965-METHODDEF(int)
966-read_markers (j_decompress_ptr cinfo)
967-{
968- /* Outer loop repeats once for each marker. */
969- for (;;) {
970- /* Collect the marker proper, unless we already did. */
971- /* NB: first_marker() enforces the requirement that SOI appear first. */
972- if (cinfo->unread_marker == 0) {
973- if (! cinfo->marker->saw_SOI) {
974- if (! first_marker(cinfo))
975- return JPEG_SUSPENDED;
976- } else {
977- if (! next_marker(cinfo))
978- return JPEG_SUSPENDED;
979- }
980- }
981- /* At this point cinfo->unread_marker contains the marker code and the
982- * input point is just past the marker proper, but before any parameters.
983- * A suspension will cause us to return with this state still true.
984- */
985- switch (cinfo->unread_marker) {
986- case M_SOI:
987- if (! get_soi(cinfo))
988- return JPEG_SUSPENDED;
989- break;
990-
991- case M_SOF0: /* Baseline */
992- case M_SOF1: /* Extended sequential, Huffman */
993- if (! get_sof(cinfo, FALSE, FALSE))
994- return JPEG_SUSPENDED;
995- break;
996-
997- case M_SOF2: /* Progressive, Huffman */
998- if (! get_sof(cinfo, TRUE, FALSE))
999- return JPEG_SUSPENDED;
1000- break;
1001-
1002- case M_SOF9: /* Extended sequential, arithmetic */
1003- if (! get_sof(cinfo, FALSE, TRUE))
1004- return JPEG_SUSPENDED;
1005- break;
1006-
1007- case M_SOF10: /* Progressive, arithmetic */
1008- if (! get_sof(cinfo, TRUE, TRUE))
1009- return JPEG_SUSPENDED;
1010- break;
1011-
1012- /* Currently unsupported SOFn types */
1013- case M_SOF3: /* Lossless, Huffman */
1014- case M_SOF5: /* Differential sequential, Huffman */
1015- case M_SOF6: /* Differential progressive, Huffman */
1016- case M_SOF7: /* Differential lossless, Huffman */
1017- case M_JPG: /* Reserved for JPEG extensions */
1018- case M_SOF11: /* Lossless, arithmetic */
1019- case M_SOF13: /* Differential sequential, arithmetic */
1020- case M_SOF14: /* Differential progressive, arithmetic */
1021- case M_SOF15: /* Differential lossless, arithmetic */
1022- ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker);
1023- break;
1024-
1025- case M_SOS:
1026- if (! get_sos(cinfo))
1027- return JPEG_SUSPENDED;
1028- cinfo->unread_marker = 0; /* processed the marker */
1029- return JPEG_REACHED_SOS;
1030-
1031- case M_EOI:
1032- TRACEMS(cinfo, 1, JTRC_EOI);
1033- cinfo->unread_marker = 0; /* processed the marker */
1034- return JPEG_REACHED_EOI;
1035-
1036- case M_DAC:
1037- if (! get_dac(cinfo))
1038- return JPEG_SUSPENDED;
1039- break;
1040-
1041- case M_DHT:
1042- if (! get_dht(cinfo))
1043- return JPEG_SUSPENDED;
1044- break;
1045-
1046- case M_DQT:
1047- if (! get_dqt(cinfo))
1048- return JPEG_SUSPENDED;
1049- break;
1050-
1051- case M_DRI:
1052- if (! get_dri(cinfo))
1053- return JPEG_SUSPENDED;
1054- break;
1055-
1056- case M_APP0:
1057- case M_APP1:
1058- case M_APP2:
1059- case M_APP3:
1060- case M_APP4:
1061- case M_APP5:
1062- case M_APP6:
1063- case M_APP7:
1064- case M_APP8:
1065- case M_APP9:
1066- case M_APP10:
1067- case M_APP11:
1068- case M_APP12:
1069- case M_APP13:
1070- case M_APP14:
1071- case M_APP15:
1072- if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[
1073- cinfo->unread_marker - (int) M_APP0]) (cinfo))
1074- return JPEG_SUSPENDED;
1075- break;
1076-
1077- case M_COM:
1078- if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo))
1079- return JPEG_SUSPENDED;
1080- break;
1081-
1082- case M_RST0: /* these are all parameterless */
1083- case M_RST1:
1084- case M_RST2:
1085- case M_RST3:
1086- case M_RST4:
1087- case M_RST5:
1088- case M_RST6:
1089- case M_RST7:
1090- case M_TEM:
1091- TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker);
1092- break;
1093-
1094- case M_DNL: /* Ignore DNL ... perhaps the wrong thing */
1095- if (! skip_variable(cinfo))
1096- return JPEG_SUSPENDED;
1097- break;
1098-
1099- default: /* must be DHP, EXP, JPGn, or RESn */
1100- /* For now, we treat the reserved markers as fatal errors since they are
1101- * likely to be used to signal incompatible JPEG Part 3 extensions.
1102- * Once the JPEG 3 version-number marker is well defined, this code
1103- * ought to change!
1104- */
1105- ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
1106- break;
1107- }
1108- /* Successfully processed marker, so reset state variable */
1109- cinfo->unread_marker = 0;
1110- } /* end loop */
1111-}
1112-
1113-
1114-/*
1115- * Read a restart marker, which is expected to appear next in the datastream;
1116- * if the marker is not there, take appropriate recovery action.
1117- * Returns FALSE if suspension is required.
1118- *
1119- * This is called by the entropy decoder after it has read an appropriate
1120- * number of MCUs. cinfo->unread_marker may be nonzero if the entropy decoder
1121- * has already read a marker from the data source. Under normal conditions
1122- * cinfo->unread_marker will be reset to 0 before returning; if not reset,
1123- * it holds a marker which the decoder will be unable to read past.
1124- */
1125-
1126-METHODDEF(boolean)
1127-read_restart_marker (j_decompress_ptr cinfo)
1128-{
1129- /* Obtain a marker unless we already did. */
1130- /* Note that next_marker will complain if it skips any data. */
1131- if (cinfo->unread_marker == 0) {
1132- if (! next_marker(cinfo))
1133- return FALSE;
1134- }
1135-
1136- if (cinfo->unread_marker ==
1137- ((int) M_RST0 + cinfo->marker->next_restart_num)) {
1138- /* Normal case --- swallow the marker and let entropy decoder continue */
1139- TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num);
1140- cinfo->unread_marker = 0;
1141- } else {
1142- /* Uh-oh, the restart markers have been messed up. */
1143- /* Let the data source manager determine how to resync. */
1144- if (! (*cinfo->src->resync_to_restart) (cinfo,
1145- cinfo->marker->next_restart_num))
1146- return FALSE;
1147- }
1148-
1149- /* Update next-restart state */
1150- cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7;
1151-
1152- return TRUE;
1153-}
1154-
1155-
1156-/*
1157- * This is the default resync_to_restart method for data source managers
1158- * to use if they don't have any better approach. Some data source managers
1159- * may be able to back up, or may have additional knowledge about the data
1160- * which permits a more intelligent recovery strategy; such managers would
1161- * presumably supply their own resync method.
1162- *
1163- * read_restart_marker calls resync_to_restart if it finds a marker other than
1164- * the restart marker it was expecting. (This code is *not* used unless
1165- * a nonzero restart interval has been declared.) cinfo->unread_marker is
1166- * the marker code actually found (might be anything, except 0 or FF).
1167- * The desired restart marker number (0..7) is passed as a parameter.
1168- * This routine is supposed to apply whatever error recovery strategy seems
1169- * appropriate in order to position the input stream to the next data segment.
1170- * Note that cinfo->unread_marker is treated as a marker appearing before
1171- * the current data-source input point; usually it should be reset to zero
1172- * before returning.
1173- * Returns FALSE if suspension is required.
1174- *
1175- * This implementation is substantially constrained by wanting to treat the
1176- * input as a data stream; this means we can't back up. Therefore, we have
1177- * only the following actions to work with:
1178- * 1. Simply discard the marker and let the entropy decoder resume at next
1179- * byte of file.
1180- * 2. Read forward until we find another marker, discarding intervening
1181- * data. (In theory we could look ahead within the current bufferload,
1182- * without having to discard data if we don't find the desired marker.
1183- * This idea is not implemented here, in part because it makes behavior
1184- * dependent on buffer size and chance buffer-boundary positions.)
1185- * 3. Leave the marker unread (by failing to zero cinfo->unread_marker).
1186- * This will cause the entropy decoder to process an empty data segment,
1187- * inserting dummy zeroes, and then we will reprocess the marker.
1188- *
1189- * #2 is appropriate if we think the desired marker lies ahead, while #3 is
1190- * appropriate if the found marker is a future restart marker (indicating
1191- * that we have missed the desired restart marker, probably because it got
1192- * corrupted).
1193- * We apply #2 or #3 if the found marker is a restart marker no more than
1194- * two counts behind or ahead of the expected one. We also apply #2 if the
1195- * found marker is not a legal JPEG marker code (it's certainly bogus data).
1196- * If the found marker is a restart marker more than 2 counts away, we do #1
1197- * (too much risk that the marker is erroneous; with luck we will be able to
1198- * resync at some future point).
1199- * For any valid non-restart JPEG marker, we apply #3. This keeps us from
1200- * overrunning the end of a scan. An implementation limited to single-scan
1201- * files might find it better to apply #2 for markers other than EOI, since
1202- * any other marker would have to be bogus data in that case.
1203- */
1204-
1205-GLOBAL(boolean)
1206-jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired)
1207-{
1208- int marker = cinfo->unread_marker;
1209- int action = 1;
1210-
1211- /* Always put up a warning. */
1212- WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired);
1213-
1214- /* Outer loop handles repeated decision after scanning forward. */
1215- for (;;) {
1216- if (marker < (int) M_SOF0)
1217- action = 2; /* invalid marker */
1218- else if (marker < (int) M_RST0 || marker > (int) M_RST7)
1219- action = 3; /* valid non-restart marker */
1220- else {
1221- if (marker == ((int) M_RST0 + ((desired+1) & 7)) ||
1222- marker == ((int) M_RST0 + ((desired+2) & 7)))
1223- action = 3; /* one of the next two expected restarts */
1224- else if (marker == ((int) M_RST0 + ((desired-1) & 7)) ||
1225- marker == ((int) M_RST0 + ((desired-2) & 7)))
1226- action = 2; /* a prior restart, so advance */
1227- else
1228- action = 1; /* desired restart or too far away */
1229- }
1230- TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action);
1231- switch (action) {
1232- case 1:
1233- /* Discard marker and let entropy decoder resume processing. */
1234- cinfo->unread_marker = 0;
1235- return TRUE;
1236- case 2:
1237- /* Scan to the next marker, and repeat the decision loop. */
1238- if (! next_marker(cinfo))
1239- return FALSE;
1240- marker = cinfo->unread_marker;
1241- break;
1242- case 3:
1243- /* Return without advancing past this marker. */
1244- /* Entropy decoder will be forced to process an empty segment. */
1245- return TRUE;
1246- }
1247- } /* end loop */
1248-}
1249-
1250-
1251-/*
1252- * Reset marker processing state to begin a fresh datastream.
1253- */
1254-
1255-METHODDEF(void)
1256-reset_marker_reader (j_decompress_ptr cinfo)
1257-{
1258- my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
1259-
1260- cinfo->comp_info = NULL; /* until allocated by get_sof */
1261- cinfo->input_scan_number = 0; /* no SOS seen yet */
1262- cinfo->unread_marker = 0; /* no pending marker */
1263- marker->pub.saw_SOI = FALSE; /* set internal state too */
1264- marker->pub.saw_SOF = FALSE;
1265- marker->pub.discarded_bytes = 0;
1266- marker->cur_marker = NULL;
1267-}
1268-
1269-
1270-/*
1271- * Initialize the marker reader module.
1272- * This is called only once, when the decompression object is created.
1273- */
1274-
1275-GLOBAL(void)
1276-jinit_marker_reader (j_decompress_ptr cinfo)
1277-{
1278- my_marker_ptr marker;
1279- int i;
1280-
1281- /* Create subobject in permanent pool */
1282- marker = (my_marker_ptr)
1283- (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
1284- SIZEOF(my_marker_reader));
1285- cinfo->marker = (struct jpeg_marker_reader *) marker;
1286- /* Initialize public method pointers */
1287- marker->pub.reset_marker_reader = reset_marker_reader;
1288- marker->pub.read_markers = read_markers;
1289- marker->pub.read_restart_marker = read_restart_marker;
1290- /* Initialize COM/APPn processing.
1291- * By default, we examine and then discard APP0 and APP14,
1292- * but simply discard COM and all other APPn.
1293- */
1294- marker->process_COM = skip_variable;
1295- marker->length_limit_COM = 0;
1296- for (i = 0; i < 16; i++) {
1297- marker->process_APPn[i] = skip_variable;
1298- marker->length_limit_APPn[i] = 0;
1299- }
1300- marker->process_APPn[0] = get_interesting_appn;
1301- marker->process_APPn[14] = get_interesting_appn;
1302- /* Reset marker processing state */
1303- reset_marker_reader(cinfo);
1304-}
1305-
1306-
1307-/*
1308- * Control saving of COM and APPn markers into marker_list.
1309- */
1310-
1311-#ifdef SAVE_MARKERS_SUPPORTED
1312-
1313-GLOBAL(void)
1314-jpeg_save_markers (j_decompress_ptr cinfo, int marker_code,
1315- unsigned int length_limit)
1316-{
1317- my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
1318- long maxlength;
1319- jpeg_marker_parser_method processor;
1320-
1321- /* Length limit mustn't be larger than what we can allocate
1322- * (should only be a concern in a 16-bit environment).
1323- */
1324- maxlength = cinfo->mem->max_alloc_chunk - SIZEOF(struct jpeg_marker_struct);
1325- if (((long) length_limit) > maxlength)
1326- length_limit = (unsigned int) maxlength;
1327-
1328- /* Choose processor routine to use.
1329- * APP0/APP14 have special requirements.
1330- */
1331- if (length_limit) {
1332- processor = save_marker;
1333- /* If saving APP0/APP14, save at least enough for our internal use. */
1334- if (marker_code == (int) M_APP0 && length_limit < APP0_DATA_LEN)
1335- length_limit = APP0_DATA_LEN;
1336- else if (marker_code == (int) M_APP14 && length_limit < APP14_DATA_LEN)
1337- length_limit = APP14_DATA_LEN;
1338- } else {
1339- processor = skip_variable;
1340- /* If discarding APP0/APP14, use our regular on-the-fly processor. */
1341- if (marker_code == (int) M_APP0 || marker_code == (int) M_APP14)
1342- processor = get_interesting_appn;
1343- }
1344-
1345- if (marker_code == (int) M_COM) {
1346- marker->process_COM = processor;
1347- marker->length_limit_COM = length_limit;
1348- } else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) {
1349- marker->process_APPn[marker_code - (int) M_APP0] = processor;
1350- marker->length_limit_APPn[marker_code - (int) M_APP0] = length_limit;
1351- } else
1352- ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
1353-}
1354-
1355-#endif /* SAVE_MARKERS_SUPPORTED */
1356-
1357-
1358-/*
1359- * Install a special processing method for COM or APPn markers.
1360- */
1361-
1362-GLOBAL(void)
1363-jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code,
1364- jpeg_marker_parser_method routine)
1365-{
1366- my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
1367-
1368- if (marker_code == (int) M_COM)
1369- marker->process_COM = routine;
1370- else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15)
1371- marker->process_APPn[marker_code - (int) M_APP0] = routine;
1372- else
1373- ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
1374-}
1375
1376=== removed file 'README.6b1'
1377--- README.6b1 2010-06-29 13:55:42 +0000
1378+++ README.6b1 1970-01-01 00:00:00 +0000
1379@@ -1,29 +0,0 @@
1380-Extra README for release 6b1 of 1-Jun-2010
1381-==========================================
1382-
1383-This release is identical to release 6b with the exception of the build system,
1384-and of library symbols versioning on platforms that support them. This release
1385-is only intended as a transition help toward the upgrade to libjpeg8. If you
1386-can upgrade directly to libjpeg8, you do not need libjpeg6b1.
1387-
1388-This release was prepared by Bill Allombert <ballombe@debian.org> from release
1389-6b and the build system of release 8 by Guido Vollbeding and Bob Friesenhahn.
1390-
1391-Files changed:
1392- config.guess (updated from automake)
1393- config.sub (updated from automake)
1394- configure (autogenerated)
1395- ltmain.sh (updated from libtool)
1396-
1397-Files added:
1398- aclocal.m4 (from libjpeg8)
1399- configure.ac (from libjpeg8)
1400- depcomp (from automake)
1401- libjpeg.map (from libjpeg8, modified)
1402- Makefile.am (from libjpeg8, modified)
1403- Makefile.in (autogenerated)
1404- missing (from automake)
1405- README.6b1 (this file)
1406-
1407-File removed:
1408- ltconfig (obsoleted)
1409
1410=== added file 'README.6b2'
1411--- README.6b2 1970-01-01 00:00:00 +0000
1412+++ README.6b2 2015-07-21 20:52:57 +0000
1413@@ -0,0 +1,42 @@
1414+Extra README for release 6b2 of 25-Dec-2013
1415+===========================================
1416+
1417+This release is identical to release 6b1 with the exception of a fix for
1418+CVE 2013-6629 and 2013-6630 (information disclosure).
1419+
1420+This release was prepared by Bill Allombert <ballombe@debian.org> by combining
1421+release 6b1 with a fix written by Guido Vollbeding for release 9a.
1422+
1423+Files changed:
1424+ jdmarker.c
1425+ README.6b2 (this file, was README.6b1)
1426+
1427+Extra README for release 6b1 of 1-Jun-2010
1428+==========================================
1429+
1430+This release is identical to release 6b with the exception of the build system,
1431+and of library symbols versioning on platforms that support them. This release
1432+is only intended as a transition help toward the upgrade to libjpeg8. If you
1433+can upgrade directly to libjpeg8, you do not need libjpeg6b1.
1434+
1435+This release was prepared by Bill Allombert <ballombe@debian.org> from release
1436+6b and the build system of release 8 by Guido Vollbeding and Bob Friesenhahn.
1437+
1438+Files changed:
1439+ config.guess (updated from automake)
1440+ config.sub (updated from automake)
1441+ configure (autogenerated)
1442+ ltmain.sh (updated from libtool)
1443+
1444+Files added:
1445+ aclocal.m4 (from libjpeg8)
1446+ configure.ac (from libjpeg8)
1447+ depcomp (from automake)
1448+ libjpeg.map (from libjpeg8, modified)
1449+ Makefile.am (from libjpeg8, modified)
1450+ Makefile.in (autogenerated)
1451+ missing (from automake)
1452+ README.6b1 (this file)
1453+
1454+File removed:
1455+ ltconfig (obsoleted)
1456
1457=== modified file 'configure.ac'
1458--- configure.ac 2010-06-29 13:55:42 +0000
1459+++ configure.ac 2015-07-21 20:52:57 +0000
1460@@ -21,7 +21,7 @@
1461
1462 # Initialize Automake
1463 # Don't require all the GNU mandated files
1464-AM_INIT_AUTOMAKE([-Wall -Werror ansi2knr no-dist foreign])
1465+AM_INIT_AUTOMAKE([-Wall -Werror -Wno-obsolete ansi2knr no-dist foreign])
1466
1467 # Make --enable-silent-rules the default.
1468 # To get verbose build output you may configure
1469
1470=== modified file 'debian/changelog'
1471--- debian/changelog 2013-12-10 18:09:16 +0000
1472+++ debian/changelog 2015-07-21 20:52:57 +0000
1473@@ -1,3 +1,37 @@
1474+libjpeg6b (1:6b2-2ubuntu1) wily; urgency=medium
1475+
1476+ * Merge from Debian. Remaining changes:
1477+ - debian/rules: Remove "-Bsymbolic-functions" from LDFLAGS.
1478+
1479+ -- Jackson Doak <noskcaj@ubuntu.com> Wed, 22 Jul 2015 06:46:14 +1000
1480+
1481+libjpeg6b (1:6b2-2) unstable; urgency=low
1482+
1483+ * Bump epoch to recover from libjpeg-turbo hijacking of libjpeg62.
1484+ * debian/control:
1485+ - Bump standard version to 3.9.6.
1486+
1487+ -- Bill Allombert <ballombe@debian.org> Mon, 03 Nov 2014 19:12:47 +0100
1488+
1489+libjpeg6b (6b2-1) unstable; urgency=low
1490+
1491+ * New bugfix upstream release
1492+ - patch fix-CVE-2013-6629_6630: removed
1493+ * debian/watch: added
1494+ * debian/rules:
1495+ - Use dh_prep instead of dh_clean -k
1496+ - Do not use -D_REENTRANT
1497+ - Add -Wl,-z,relro to LDFLAGS
1498+ * debian/copyright:
1499+ - Add new upstream URL
1500+ * debian/control:
1501+ - Bump standard version to 3.9.5.
1502+ * debian/control, debian/rules:
1503+ - Apply patch by Mauricio Faria de Oliveira to use dh_autoreconf
1504+ closes: #753362
1505+
1506+ -- Bill Allombert <ballombe@debian.org> Sat, 05 Jul 2014 14:48:45 +0200
1507+
1508 libjpeg6b (6b1-4ubuntu1) trusty; urgency=low
1509
1510 * Merge from Debian unstable (LP: #1011177). Remaining changes:
1511
1512=== modified file 'debian/control'
1513--- debian/control 2012-11-29 13:52:49 +0000
1514+++ debian/control 2015-07-21 20:52:57 +0000
1515@@ -3,8 +3,8 @@
1516 XSBC-Original-Maintainer: Bill Allombert <ballombe@debian.org>
1517 Section: graphics
1518 Priority: optional
1519-Build-Depends: debhelper (>= 5), autotools-dev
1520-Standards-Version: 3.9.3
1521+Build-Depends: debhelper (>= 5), autotools-dev, dh-autoreconf, automake1.11
1522+Standards-Version: 3.9.6
1523
1524 Package: libjpeg62
1525 Architecture: any
1526
1527=== modified file 'debian/copyright'
1528--- debian/copyright 2013-12-05 23:43:52 +0000
1529+++ debian/copyright 2015-07-21 20:52:57 +0000
1530@@ -2,7 +2,7 @@
1531 JPEG Group.
1532
1533 This package was created by Bill Allombert <ballombe@debian.org> from sources
1534-which can be found at http://www.ijg.org/files/jpegsrc.v6b1.tar.gz.
1535+which can be found at http://jpegclub.org/support/files/jpegsrc.v6b2.tar.gz
1536
1537 Package for version 6b was created by Mark Mickan <mmickan@debian.org> from
1538 sources which can be found at ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
1539
1540=== added file 'debian/patches/automake-Wno-obsolete'
1541--- debian/patches/automake-Wno-obsolete 1970-01-01 00:00:00 +0000
1542+++ debian/patches/automake-Wno-obsolete 2015-07-21 20:52:57 +0000
1543@@ -0,0 +1,19 @@
1544+Description: automake 1.11 needs -Wno-obsolete due to ansi2knr (for autoreconf)
1545+ or fails with message 'automatic de-ANSI-fication support is deprecated'.
1546+Forwarded: not-needed
1547+Last-Update: 2014-06-30
1548+Author: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
1549+
1550+Index: libjpeg6b-6b1/configure.ac
1551+===================================================================
1552+--- libjpeg6b-6b1.orig/configure.ac 2010-05-15 16:28:51.000000000 -0300
1553++++ libjpeg6b-6b1/configure.ac 2014-06-30 18:07:36.000000000 -0300
1554+@@ -21,7 +21,7 @@
1555+
1556+ # Initialize Automake
1557+ # Don't require all the GNU mandated files
1558+-AM_INIT_AUTOMAKE([-Wall -Werror ansi2knr no-dist foreign])
1559++AM_INIT_AUTOMAKE([-Wall -Werror -Wno-obsolete ansi2knr no-dist foreign])
1560+
1561+ # Make --enable-silent-rules the default.
1562+ # To get verbose build output you may configure
1563
1564=== removed file 'debian/patches/fix-CVE-2013-6629_6630'
1565--- debian/patches/fix-CVE-2013-6629_6630 2013-12-05 23:43:52 +0000
1566+++ debian/patches/fix-CVE-2013-6629_6630 1970-01-01 00:00:00 +0000
1567@@ -1,108 +0,0 @@
1568-Index: libjpeg6b-6b1/jdmarker.c
1569-===================================================================
1570---- libjpeg6b-6b1.orig/jdmarker.c 1998-02-21 21:24:50.000000000 +0100
1571-+++ libjpeg6b-6b1/jdmarker.c 2013-12-03 22:53:28.393111296 +0100
1572-@@ -238,7 +238,7 @@
1573- /* Process a SOFn marker */
1574- {
1575- INT32 length;
1576-- int c, ci;
1577-+ int c, ci, i;
1578- jpeg_component_info * compptr;
1579- INPUT_VARS(cinfo);
1580-
1581-@@ -275,11 +275,27 @@
1582- cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small)
1583- ((j_common_ptr) cinfo, JPOOL_IMAGE,
1584- cinfo->num_components * SIZEOF(jpeg_component_info));
1585--
1586-- for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
1587-- ci++, compptr++) {
1588-+
1589-+ for (ci = 0; ci < cinfo->num_components; ci++) {
1590-+ INPUT_BYTE(cinfo, c, return FALSE);
1591-+ /* Check to see whether component id has already been seen */
1592-+ /* (in violation of the spec, but unfortunately seen in some */
1593-+ /* files). If so, create "fake" component id equal to the */
1594-+ /* max id seen so far + 1. */
1595-+ for (i = 0, compptr = cinfo->comp_info; i < ci; i++, compptr++) {
1596-+ if (c == compptr->component_id) {
1597-+ compptr = cinfo->comp_info;
1598-+ c = compptr->component_id;
1599-+ compptr++;
1600-+ for (i = 1; i < ci; i++, compptr++) {
1601-+ if (compptr->component_id > c) c = compptr->component_id;
1602-+ }
1603-+ c++;
1604-+ break;
1605-+ }
1606-+ }
1607-+ compptr->component_id = c;
1608- compptr->component_index = ci;
1609-- INPUT_BYTE(cinfo, compptr->component_id, return FALSE);
1610- INPUT_BYTE(cinfo, c, return FALSE);
1611- compptr->h_samp_factor = (c >> 4) & 15;
1612- compptr->v_samp_factor = (c ) & 15;
1613-@@ -302,7 +318,7 @@
1614- /* Process a SOS marker */
1615- {
1616- INT32 length;
1617-- int i, ci, n, c, cc;
1618-+ int c, ci, i, n;
1619- jpeg_component_info * compptr;
1620- INPUT_VARS(cinfo);
1621-
1622-@@ -323,24 +339,38 @@
1623- /* Collect the component-spec parameters */
1624-
1625- for (i = 0; i < n; i++) {
1626-- INPUT_BYTE(cinfo, cc, return FALSE);
1627- INPUT_BYTE(cinfo, c, return FALSE);
1628--
1629-+
1630-+ /* Detect the case where component id's are not unique, and, if so, */
1631-+ /* create a fake component id using the same logic as in get_sof. */
1632-+ for (ci = 0; ci < i; ci++) {
1633-+ if (c == cinfo->cur_comp_info[ci]->component_id) {
1634-+ c = cinfo->cur_comp_info[0]->component_id;
1635-+ for (ci = 1; ci < i; ci++) {
1636-+ compptr = cinfo->cur_comp_info[ci];
1637-+ if (compptr->component_id > c) c = compptr->component_id;
1638-+ }
1639-+ c++;
1640-+ break;
1641-+ }
1642-+ }
1643-+
1644- for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
1645- ci++, compptr++) {
1646-- if (cc == compptr->component_id)
1647-+ if (c == compptr->component_id)
1648- goto id_found;
1649- }
1650-
1651-- ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc);
1652-+ ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, c);
1653-
1654- id_found:
1655-
1656- cinfo->cur_comp_info[i] = compptr;
1657-+ INPUT_BYTE(cinfo, c, return FALSE);
1658- compptr->dc_tbl_no = (c >> 4) & 15;
1659- compptr->ac_tbl_no = (c ) & 15;
1660--
1661-- TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc,
1662-+
1663-+ TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, compptr->component_id,
1664- compptr->dc_tbl_no, compptr->ac_tbl_no);
1665- }
1666-
1667-@@ -456,6 +486,8 @@
1668- if (count > 256 || ((INT32) count) > length)
1669- ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
1670-
1671-+ MEMZERO(huffval, SIZEOF(huffval)); /* pre-zero array for later copy */
1672-+
1673- for (i = 0; i < count; i++)
1674- INPUT_BYTE(cinfo, huffval[i], return FALSE);
1675-
1676
1677=== modified file 'debian/patches/series'
1678--- debian/patches/series 2013-12-05 23:43:52 +0000
1679+++ debian/patches/series 2015-07-21 20:52:57 +0000
1680@@ -1,3 +1,3 @@
1681 extern_C-jpeglib.h
1682 use-autotools-dev
1683-fix-CVE-2013-6629_6630
1684+automake-Wno-obsolete
1685
1686=== modified file 'debian/rules'
1687--- debian/rules 2013-12-10 18:09:16 +0000
1688+++ debian/rules 2015-07-21 20:52:57 +0000
1689@@ -1,25 +1,30 @@
1690 #!/usr/bin/make -f
1691 # Made with the aid of debmake, by Christoph Lameter,
1692 # based on the sample debian/rules file for GNU hello by Ian Jackson.
1693+#export DH_VERBOSE=1
1694
1695 package=libjpeg
1696
1697 export DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
1698 export DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
1699
1700-export CFLAGS=-D_REENTRANT -g -Wall -Wno-main
1701+export LDFLAGS=-Wl,-z,relro
1702+export CFLAGS=-g -Wall -Wno-main
1703 ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
1704 CFLAGS += -O0
1705 else
1706 CFLAGS += -O2
1707 endif
1708
1709-#export DH_VERBOSE=1
1710+export AUTOMAKE = automake-1.11
1711+export ACLOCAL = aclocal-1.11
1712+export AUTOHEADER = true
1713
1714 build: build-stamp
1715 build-stamp:
1716 dh_testdir
1717- LDFLAGS= ./configure --prefix=/usr --mandir=/usr/share/man \
1718+ dh_autoreconf
1719+ LDFLAGS=-Wl,-z,relro ./configure --prefix=/usr --mandir=/usr/share/man \
1720 --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
1721 --enable-static --enable-shared --enable-maxmem=1024 \
1722 --disable-silent-rules \
1723@@ -36,6 +41,7 @@
1724 -rm -f build-stamp stamp-h1
1725 if [ -f Makefile ]; then $(MAKE) clean; fi
1726 -rm -f Makefile jconfig.h config.log config.status libtool
1727+ dh_autoreconf_clean
1728 dh_clean
1729
1730 binary-indep:
1731@@ -43,7 +49,7 @@
1732 binary-arch: build
1733 dh_testdir
1734 dh_testroot
1735- dh_clean -k
1736+ dh_prep
1737 dh_installdirs
1738 mkdir --parents debian/tmp/usr/bin \
1739 debian/tmp/usr/lib \
1740@@ -66,7 +72,7 @@
1741 # separate out lib package
1742 dh_movefiles
1743 # Finish it off with debhelper
1744- dh_installdocs README README.6b1
1745+ dh_installdocs README README.6b2
1746 dh_installexamples
1747 dh_installchangelogs change.log
1748 dh_strip --dbg-package=libjpeg62-dbg
1749
1750=== modified file 'jdmarker.c'
1751--- jdmarker.c 2013-12-05 23:43:52 +0000
1752+++ jdmarker.c 2015-07-21 20:52:57 +0000
1753@@ -2,6 +2,9 @@
1754 * jdmarker.c
1755 *
1756 * Copyright (C) 1991-1998, Thomas G. Lane.
1757+ * Modified 2013 by Bill Allombert for CVE 2013-6629 and 2013-6630
1758+ * by applying a fix by Guido Vollbeding.
1759+ *
1760 * This file is part of the Independent JPEG Group's software.
1761 * For conditions of distribution and use, see the accompanying README file.
1762 *

Subscribers

People subscribed via source and target branches

to all changes: