1

I'm trying to pinpoint a bug we're having and this is as far as I could come.

We're creating a memory pointer which is then filled by a C library:

hash_result_pointer = FFI::MemoryPointer.new(:uint8, 144)
CLibrary(hash_result_pointer)

We're testing this on a macOS High Sierra and on a Ubuntu Xenial via Docker. Here are the outcomes for both:

macOS High Sierra

p hash_result_pointer.read_string
# "\x0F\xE1\x11%\v\xC2)a@"

p hash_result_pointer.read_array_of_uint8(144)
# [15, 225, 17, 37, 11, 194, 41, 97, 64, 0, 32, 156, 191, 7, 38, 254, 119, 123, 104, 145, 2, 160, 137, 112, 10, 193, 71, 15, 3, 134, 245, 5, 6, 24, 234, 1, 100, 4, 188, 45, 158, 28, 120, 130, 42, 62, 152, 15, 1, 97, 48, 16, 0, 41, 125, 5, 4, 20, 142, 3, 10, 3, 156, 1, 65, 10, 122, 15, 52, 67, 52, 109, 38, 13, 18, 128, 47, 44, 53, 90, 23, 72, 32, 82, 56, 17, 42, 126, 57, 71, 71, 80, 9, 180, **65**, 80, 18, 9, 5, 56, 26, 17, 2, 121, 21, 52, 21, 92, 74, 19, 92, 83, 84, 45, 89, 123, 34, 117, 75, 89, 8, 7, 19, 12, 8, 5, 8, 8, 25, 1, 20, 14, 48, 3, 24, 57, 12, 32, 18, 90, 3, 35, 15, 34]

Ubuntu Xenial via Docker

p hash_result_pointer.read_string
# "\x0F\xE1\x11%\v\xC2)a@"

p hash_result_pointer.read_array_of_uint8(144)
# [15, 225, 17, 37, 11, 194, 41, 97, 64, 0, 32, 156, 191, 7, 38, 254, 119, 123, 104, 145, 2, 160, 137, 112, 10, 193, 71, 15, 3, 134, 245, 5, 6, 24, 234, 1, 100, 4, 188, 45, 158, 28, 120, 130, 42, 62, 152, 15, 1, 97, 48, 16, 0, 41, 125, 5, 4, 20, 142, 3, 10, 3, 156, 1, 65, 10, 122, 15, 52, 67, 52, 109, 38, 13, 18, 128, 47, 44, 53, 90, 23, 72, 32, 82, 56, 17, 42, 126, 57, 71, 71, 80, 9, 180, **66**, 80, 18, 9, 5, 56, 26, 17, 2, 121, 21, 52, 21, 92, 74, 19, 92, 83, 84, 45, 89, 123, 34, 117, 75, 89, 8, 7, 19, 12, 8, 5, 8, 8, 25, 1, 20, 14, 48, 3, 24, 57, 12, 32, 18, 90, 3, 35, 15, 34]

As you can see, there is one array element that differs by 1 (65 vs 66) between the two environments. I have no clue why this is happening and I also don't know what could cause this and where shall I look further. Would appreciate any tip!

linkyndy
  • 17,038
  • 20
  • 114
  • 194
  • 1
    It looks like the difference is coming from the C function, rather than anything to do with Ruby or FFI. I would look there, perhaps write a small C program that calls the function and see if you still get the difference. – matt May 24 '19 at 15:28
  • Indeed, it seems that the input to the C function is different in the two environments. Opened https://stackoverflow.com/questions/56327073/ruby-vips-image-write-to-memory-yields-different-results-in-different-environmen as a followup, since it's pretty hard to pinpoint the problem. Thanks for your answer! – linkyndy May 27 '19 at 13:30

0 Answers0