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
134// faad_initbits_rev(&ld_rvlc_sf_rev, (void*)rvlc_sf_buffer,134// faad_initbits_rev(&ld_rvlc_sf_rev, (void*)rvlc_sf_buffer,
135// ics->length_of_rvlc_sf);135// ics->length_of_rvlc_sf);
136 }136 }
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)) {
138 memset(&ld_rvlc_sf, 0, sizeof(ld_rvlc_sf));138 memset(&ld_rvlc_sf, 0, sizeof(ld_rvlc_sf));
139 ld_rvlc_sf.error = 1;
140 }
139 141
140 if (ics->sf_escapes_present)142 if (ics->sf_escapes_present)
141 {143 {
@@ -149,8 +151,10 @@ uint8_t rvlc_decode_scale_factors(ic_stream *ics, bitfile *ld) · 7 unmodified lines
149// faad_initbits_rev(&ld_rvlc_esc_rev, (void*)rvlc_esc_buffer,151// faad_initbits_rev(&ld_rvlc_esc_rev, (void*)rvlc_esc_buffer,
150// ics->length_of_rvlc_escapes);152// ics->length_of_rvlc_escapes);
151 }153 }
152 if (!ics->sf_escapes_present || (ld_rvlc_esc.error != 0))154 if (!ics->sf_escapes_present || (ld_rvlc_esc.error != 0)) {
153 memset(&ld_rvlc_esc, 0, sizeof(ld_rvlc_esc));155 memset(&ld_rvlc_esc, 0, sizeof(ld_rvlc_esc));
156 ld_rvlc_esc.error = 1;
157 }
154 158
155 /* decode the rvlc scale factors and escapes */159 /* decode the rvlc scale factors and escapes */
156 result = rvlc_decode_sf_forward(ics, &ld_rvlc_sf,160 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
175{179{
176 int8_t g, sfb;180 int8_t g, sfb;
177 int8_t t = 0;181 int8_t t = 0;
178 int8_t error = 0;182 int8_t error = ld_sf->error | ld_esc->error;
179 int8_t noise_pcm_flag = 1;183 int8_t noise_pcm_flag = 1;
180 184
181 int16_t scale_factor = ics->global_gain;185 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