diff options
-rw-r--r-- | miscutils/bc.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index eaa28a94a..2da7c317c 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c | |||
@@ -5256,11 +5256,18 @@ exec_err: | |||
5256 | 5256 | ||
5257 | static size_t bc_program_index(char *code, size_t *bgn) | 5257 | static size_t bc_program_index(char *code, size_t *bgn) |
5258 | { | 5258 | { |
5259 | char amt = code[(*bgn)++], i = 0; | 5259 | unsigned char *bytes = (void*)(code + *bgn); |
5260 | size_t res = 0; | 5260 | unsigned amt; |
5261 | unsigned i; | ||
5262 | size_t res; | ||
5263 | |||
5264 | amt = *bytes++; | ||
5265 | *bgn += amt + 1; | ||
5261 | 5266 | ||
5262 | for (; i < amt; ++i, ++(*bgn)) | 5267 | amt *= 8; |
5263 | res |= (((size_t)((int) code[*bgn]) & UCHAR_MAX) << (i * CHAR_BIT)); | 5268 | res = 0; |
5269 | for (i = 0; i < amt; i += 8) | ||
5270 | res |= (size_t)(*bytes++) << i; | ||
5264 | 5271 | ||
5265 | return res; | 5272 | return res; |
5266 | } | 5273 | } |