History

More careful error handling in rvlc SF decoding (#156)

Just filling bitfield with zeroes is wrong - it is not meant to use it after that. In this PR error field is filled again and used downstream.

Eugene Kliuchnikov committed 3 years ago

Commit 7cb08001 parent 31fbf391 file · +7 −3Browse files

Unified · Split

libfaad/rvlc.c+7−3
@@ -134,8 +134,10 @@ uint8_t rvlc_decode_scale_factors(ic_stream *ics, bitfile *ld) · 133 unmodified lines
134134 // faad_initbits_rev(&ld_rvlc_sf_rev, (void*)rvlc_sf_buffer,
135135 // ics->length_of_rvlc_sf);
136136 }
137− if ((ics->length_of_rvlc_sf == 0) || (ld_rvlc_sf.error != 0))
137+ if ((ics->length_of_rvlc_sf == 0) || (ld_rvlc_sf.error != 0)) {
138138 memset(&ld_rvlc_sf, 0, sizeof(ld_rvlc_sf));
139+ ld_rvlc_sf.error = 1;
140+ }
139141
140142 if (ics->sf_escapes_present)
141143 {
@@ -149,8 +151,10 @@ uint8_t rvlc_decode_scale_factors(ic_stream *ics, bitfile *ld) · 7 unmodified lines
149151 // faad_initbits_rev(&ld_rvlc_esc_rev, (void*)rvlc_esc_buffer,
150152 // ics->length_of_rvlc_escapes);
151153 }
152− if (!ics->sf_escapes_present || (ld_rvlc_esc.error != 0))
154+ if (!ics->sf_escapes_present || (ld_rvlc_esc.error != 0)) {
153155 memset(&ld_rvlc_esc, 0, sizeof(ld_rvlc_esc));
156+ ld_rvlc_esc.error = 1;
157+ }
154158
155159 /* decode the rvlc scale factors and escapes */
156160 result = rvlc_decode_sf_forward(ics, &ld_rvlc_sf,
@@ -175,7 +179,7 @@ static uint8_t rvlc_decode_sf_forward(ic_stream *ics, bitfile *ld_sf, bitfile *l · 18 unmodified lines
175179 {
176180 int8_t g, sfb;
177181 int8_t t = 0;
178− int8_t error = 0;
182+ int8_t error = ld_sf->error | ld_esc->error;
179183 int8_t noise_pcm_flag = 1;
180184
181185 int16_t scale_factor = ics->global_gain;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t