@@ -46,16 +46,22 @@ Pairs toPairs(std::string_view buffer) {
4646 if (buffer.size () < sizeof (uint32_t )) {
4747 return {};
4848 }
49- auto size = *reinterpret_cast <const uint32_t *>(b);
49+ bool reverse = " null" != contextOrEffectiveContext ()->wasmVm ()->runtime ();
50+ auto size = reverse ? wasmtoh (*reinterpret_cast <const uint32_t *>(b))
51+ : *reinterpret_cast <const uint32_t *>(b);
5052 b += sizeof (uint32_t );
5153 if (sizeof (uint32_t ) + size * 2 * sizeof (uint32_t ) > buffer.size ()) {
5254 return {};
5355 }
5456 result.resize (size);
5557 for (uint32_t i = 0 ; i < size; i++) {
56- result[i].first = std::string_view (nullptr , *reinterpret_cast <const uint32_t *>(b));
58+ result[i].first =
59+ std::string_view (nullptr , reverse ? wasmtoh (*reinterpret_cast <const uint32_t *>(b))
60+ : *reinterpret_cast <const uint32_t *>(b));
5761 b += sizeof (uint32_t );
58- result[i].second = std::string_view (nullptr , *reinterpret_cast <const uint32_t *>(b));
62+ result[i].second =
63+ std::string_view (nullptr , reverse ? wasmtoh (*reinterpret_cast <const uint32_t *>(b))
64+ : *reinterpret_cast <const uint32_t *>(b));
5965 b += sizeof (uint32_t );
6066 }
6167 for (auto &p : result) {
@@ -652,6 +658,7 @@ Word grpc_send(Word token, Word message_ptr, Word message_size, Word end_stream)
652658// logs.
653659Word writevImpl (Word fd, Word iovs, Word iovs_len, Word *nwritten_ptr) {
654660 auto context = contextOrEffectiveContext ();
661+ bool reverse = " null" != context->wasmVm ()->runtime ();
655662
656663 // Read syscall args.
657664 uint64_t log_level;
@@ -675,7 +682,9 @@ Word writevImpl(Word fd, Word iovs, Word iovs_len, Word *nwritten_ptr) {
675682 }
676683 const uint32_t *iovec = reinterpret_cast <const uint32_t *>(memslice.value ().data ());
677684 if (iovec[1 ] /* buf_len */ ) {
678- memslice = context->wasmVm ()->getMemory (iovec[0 ] /* buf */ , iovec[1 ] /* buf_len */ );
685+ auto iovec0 = reverse ? wasmtoh (iovec[0 ]) : iovec[0 ];
686+ auto iovec1 = reverse ? wasmtoh (iovec[1 ]) : iovec[1 ];
687+ memslice = context->wasmVm ()->getMemory (iovec0 /* buf */ , iovec1 /* buf_len */ );
679688 if (!memslice) {
680689 return 21 ; // __WASI_EFAULT
681690 }
0 commit comments