commit d1b596e5014a1ae0e44bc04cf4baf5f84f69835a from: Pompolic date: Thu Jul 30 20:16:15 2020 UTC WIP commit, rules for JPG structure commit - 867feca8227fc51e897039267b0188160b733e02 commit + d1b596e5014a1ae0e44bc04cf4baf5f84f69835a blob - c0fd252e51df618c2c1812d4efbeef50918c5d57 blob + 0cd209a838eff40e6c46ca4012ed4351a738fb87 --- pdf.c +++ pdf.c @@ -905,13 +905,13 @@ init_dct_parser(struct Env *aux) H_RULE(app0_rgb, h_repeat_n(h_uint8(), 3)); H_RULE(app0_rgb_n, h_many(app0_rgb)); - H_RULE(app0, SEQ(app0_marker, app0_length, app0_magic, app0_vmajor, app0_vminor, app0_densityunits, + H_RULE(app0, SEQ(jpgmagic, app0_marker, app0_length, app0_magic, app0_vmajor, app0_vminor, app0_densityunits, app0_densityx, app0_densityy, app0_thumbnailx, app0_thumbnaily, app0_rgb_n)); H_RULE(app1_marker, h_ch('\xE1')); H_RULE(app1_zero, h_ch('\0')); H_RULE(app1_exifdata, h_many(h_uint8())); - H_RULE(app1, SEQ(app1_marker, app1_zero, app1_exifdata)); + H_RULE(app1, SEQ(jpgmagic, app1_marker, app1_zero, app1_exifdata)); H_RULE(sof0_marker, h_ch('\xC0')); /* Bits per sample */ @@ -923,16 +923,15 @@ init_dct_parser(struct Env *aux) H_RULE(sof0_samplingfactors, h_uint8()); /* Quantization table ID */ H_RULE(sof0_qtableid, h_uint8()); - H_RULE(sof0_component, SEQ(sof0_componentid, sof0_samplingfactors, sof0_qtableid)); + H_RULE(sof0_component, SEQ(jpgmagic, sof0_componentid, sof0_samplingfactors, sof0_qtableid)); /* Rule for the component itself */ H_RULE(sof0_component_lv, h_length_value(sof0_numcomponents, sof0_component)); - H_RULE(sof0, SEQ(sof0_marker, sof0_bps, sof0_imgheight, sof0_imgwidth, sof0_component_lv)); + H_RULE(sof0, SEQ(jpgmagic, sof0_marker, sof0_bps, sof0_imgheight, sof0_imgwidth, sof0_component_lv)); - H_RULE(soi_marker, h_ch('\xD8')); - H_RULE(soi, SEQ(soi_marker)); + H_RULE(soi, SEQ(jpgmagic, soi_marker)); /* start of scan marker segment */ H_RULE(sos_marker, h_ch('\xDA')); @@ -954,18 +953,51 @@ init_dct_parser(struct Env *aux) H_RULE(sos_approxbitpos, h_uint8()); /* Final SOS segment parser */ - H_RULE(sos, SEQ(sos_marker, sos_component_lv, sos_startspectral, sos_endspectral, sos_approxbitpos)); + H_RULE(sos, SEQ(jpgmagic, sos_marker, sos_component_lv, sos_startspectral, sos_endspectral, sos_approxbitpos)); // XXX rest of the markers H_RULE(eoi_marker, h_ch('\xD9')); - H_RULE(eoi, SEQ(eoi_marker)); + H_RULE(eoi, SEQ(jpgmagic, eoi_marker)); + + H_RULE(dnl_marker, h_ch('\xDC')); + H_RULE(dnl_length, h_uint16()); + H_RULE(dnl_numoflines, h_uint16()); + H_RULE(dnl, SEQ(jpgmagic, dnl_marker, dnl_length, dnl_numoflines)); + + H_RULE(rst0_marker, h_ch('\xD0')); + H_RULE(rst0, SEQ(jpgmagic, rst0_marker)); + H_RULE(rst1_marker, h_ch('\xD1')); + H_RULE(rst1, SEQ(jpgmagic, rst1_marker)); + H_RULE(rst2_marker, h_ch('\xD2')); + H_RULE(rst2, SEQ(jpgmagic, rst2_marker)); + H_RULE(rst3_marker, h_ch('\xD3')); + H_RULE(rst3, SEQ(jpgmagic, rst3_marker)); + H_RULE(rst4_marker, h_ch('\xD4')); + H_RULE(rst4, SEQ(jpgmagic, rst4_marker)); + H_RULE(rst5_marker, h_ch('\xD5')); + H_RULE(rst5, SEQ(jpgmagic, rst5_marker)); + H_RULE(rst6_marker, h_ch('\xD6')); + H_RULE(rst6, SEQ(jpgmagic, rst6_marker)); + H_RULE(rst7_marker, h_ch('\xD7')); + H_RULE(rst7, SEQ(jpgmagic, rst7_marker)); + H_RULE(rst, CHX(rst0, rst1, rst2, rst3, rst4, rst5, rst6, rst7, rst8)); + // XXX for now this is to prevent unused variable errors when compiling //H_ARULE(dct, SEQ(jpgmagic, app0, sos)); - //H_RULE(jpg_frame); - //H_RULE(jpg_scan); - H_RULE(dct, SEQ(soi, eoi); + //H_RULE(jpg_tables_misc, h_many(CHX(app0, ) + H_RULE(jpg_tables_misc, h_many(app0)); // XXX other APP segments and table definition segments, ITU T.81 B.2.4 + + H_RULE(ecs, h_many(h_uint8()); + + H_RULE(jpg_scan_header, sos); + H_RULE(jpg_scan, SEQ(OPT(jpg_tables_misc), jpg_scan_header, OPT(h_many(SEQ(ecs, rst)), ecs))); + //H_RULE(jpg_frame_header, CHX(sof0, sof1,...)); + H_RULE(jpg_frame_header, sof0); // XXX other frame types + H_RULE(jpg_frame, SEQ(OPT(jpg_tables_misc), jpg_frame_header, jpg_scan, OPT(dnl), OPT(h_many(jpg_scan)))); + H_RULE(dct, SEQ(soi, jpg_frame, eoi)); + p_dct = dct; }