From bff355291182083826f2a27800c95966837a33ec Mon Sep 17 00:00:00 2001 From: dapaulid Date: Tue, 7 Aug 2012 14:30:18 +0200 Subject: [PATCH 1/2] Fixed endianness bug in sml_number_init --- sml/src/sml_number.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sml/src/sml_number.c b/sml/src/sml_number.c index 8f19036..f120c59 100644 --- a/sml/src/sml_number.c +++ b/sml/src/sml_number.c @@ -28,9 +28,18 @@ int sml_number_endian(); void sml_number_byte_swap(unsigned char *bytes, int bytes_len); void *sml_number_init(u64 number, unsigned char type, int size) { + + unsigned char* bytes = (unsigned char*)&number; + + // Swap bytes of big-endian number so that + // memcpy copies the right part + if (sml_number_endian() == SML_BIG_ENDIAN) { + sml_number_byte_swap(bytes, sizeof(u64)); + } + unsigned char *np = malloc(size); memset(np, 0, size); - memcpy(np, &number, size); + memcpy(np, bytes, size); return np; } From 52a967db1fed16027699af1dc9c45c482c5e1fd3 Mon Sep 17 00:00:00 2001 From: dapaulid Date: Tue, 7 Aug 2012 16:35:27 +0200 Subject: [PATCH 2/2] Fixed endianness bug in sml_number_init - revised --- sml/src/sml_number.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sml/src/sml_number.c b/sml/src/sml_number.c index f120c59..d093868 100644 --- a/sml/src/sml_number.c +++ b/sml/src/sml_number.c @@ -34,7 +34,7 @@ void *sml_number_init(u64 number, unsigned char type, int size) { // Swap bytes of big-endian number so that // memcpy copies the right part if (sml_number_endian() == SML_BIG_ENDIAN) { - sml_number_byte_swap(bytes, sizeof(u64)); + bytes += sizeof(u64) - size; } unsigned char *np = malloc(size);