Skip to content

Commit b3d821c

Browse files
committed
fixed #2333
1 parent faac2ce commit b3d821c

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

Diff for: src/laser/lsr_dec.c

+20-9
Original file line numberDiff line numberDiff line change
@@ -300,11 +300,21 @@ static void lsr_read_extension(GF_LASeRCodec *lsr, const char *name)
300300

301301
static void lsr_read_extend_class(GF_LASeRCodec *lsr, char **out_data, u32 *out_len, const char *name)
302302
{
303-
u32 len;
303+
u32 len, blen;
304304
GF_LSR_READ_INT(lsr, len, lsr->info->cfg.extensionIDBits, "reserved");
305305
len = lsr_read_vluimsbf5(lsr, "len");
306-
// while (len) gf_bs_read_int(lsr->bs, 1);
307-
gf_bs_read_long_int(lsr->bs, len);
306+
while (len && !gf_bs_is_align(lsr->bs)) {
307+
gf_bs_read_int(lsr->bs, len);
308+
len--;
309+
}
310+
blen = len / 8;
311+
gf_bs_skip_bytes(lsr->bs, blen);
312+
len -= blen*8;
313+
314+
while (len) {
315+
gf_bs_read_int(lsr->bs, 1);
316+
len--;
317+
}
308318
if (out_data) *out_data = NULL;
309319
if (out_len) *out_len = 0;
310320
}
@@ -839,10 +849,11 @@ static void lsr_read_id(GF_LASeRCodec *lsr, GF_Node *n)
839849
static Fixed lsr_translate_coords(GF_LASeRCodec *lsr, u32 val, u32 nb_bits)
840850
{
841851
if (!nb_bits) return 0;
842-
852+
if (nb_bits>=32) return 0;
853+
843854
#ifdef GPAC_FIXED_POINT
844855
if (val >> (nb_bits-1) ) {
845-
s32 neg = (s32) val - (1<<nb_bits);
856+
s64 neg = (s64) val - (0x00000001UL << nb_bits);
846857
if (neg < -FIX_ONE / 2)
847858
return 2 * gf_divfix(INT2FIX(neg/2), lsr->res_factor);
848859
return gf_divfix(INT2FIX(neg), lsr->res_factor);
@@ -853,18 +864,18 @@ static Fixed lsr_translate_coords(GF_LASeRCodec *lsr, u32 val, u32 nb_bits)
853864
}
854865
#else
855866
if (val >> (nb_bits-1) ) {
856-
s32 neg = (s32) val - (1<<nb_bits);
857-
return gf_divfix(INT2FIX(neg), lsr->res_factor);
867+
s64 neg = (s64) val - (0x00000001UL << nb_bits);
868+
return ((Fixed)neg) / lsr->res_factor;
858869
} else {
859-
return gf_divfix(INT2FIX(val), lsr->res_factor);
870+
return ((Fixed)val) / lsr->res_factor;
860871
}
861872
#endif
862873
}
863874

864875
static Fixed lsr_translate_scale(GF_LASeRCodec *lsr, u32 val)
865876
{
866877
if (val >> (lsr->coord_bits-1) ) {
867-
s32 v = val - (1<<lsr->coord_bits);
878+
s64 v = val - (0x00000001UL << lsr->coord_bits);
868879
return INT2FIX(v) / 256 ;
869880
} else {
870881
return INT2FIX(val) / 256;

0 commit comments

Comments
 (0)