From 470038b19539df98e9e6fda16b3d3c6fc0291232 Mon Sep 17 00:00:00 2001 From: Robert Pengelly Date: Thu, 12 Jun 2025 01:43:17 +0100 Subject: [PATCH] Bug fix --- ranlib.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/ranlib.c b/ranlib.c index 89cbe8b..c513f05 100644 --- a/ranlib.c +++ b/ranlib.c @@ -343,6 +343,19 @@ static void elf_get_symbols (void *object, long offset, int endianess) { } +unsigned long array_to_be_integer (unsigned char *arr, int size) { + + unsigned long value = 0; + int i, j; + + for (i = size, j = 0; i > 0; i--, j++) { + value |= arr[j] << (CHAR_BIT * (i - 1)); + } + + return value; + +} + static void hunk_get_symbols (void *object, unsigned long bytes, long offset) { unsigned char *pos = (unsigned char *) object + 4; @@ -350,7 +363,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) { struct strtab *strtab; - name_size = array_to_integer (pos, 4); + name_size = array_to_be_integer (pos, 4); name_size *= 4; pos = pos + 4 + name_size; @@ -374,7 +387,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) { if (pos[3] != 0xEB) { - size = array_to_integer (pos, 4); + size = array_to_be_integer (pos, 4); size *= 4; pos = pos + 4 + size; @@ -395,7 +408,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) { while (1) { - name_size = array_to_integer (pos, 4); + name_size = array_to_be_integer (pos, 4); pos += 4; if (name_size == 0) { @@ -418,7 +431,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) { pos += 4; } - num_ref = array_to_integer (pos, 4); + num_ref = array_to_be_integer (pos, 4); num_ref *= 4; pos = pos + 4 + num_ref; @@ -445,7 +458,7 @@ static void hunk_get_symbols (void *object, unsigned long bytes, long offset) { while (1) { - size = array_to_integer (pos, 4) * 4; + size = array_to_be_integer (pos, 4) * 4; pos += 4; if (size == 0) { -- 2.34.1