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.
Unified · Split
| @@ -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; |