This is an automated email from the ASF dual-hosted git repository.

iemejia pushed a commit to branch branch-1.12
in repository https://gitbox.apache.org/repos/asf/avro.git

commit 0748ec16aa129d98ddddfc4f809655e577c2d53e
Author: Andrew Pilloud <[email protected]>
AuthorDate: Tue May 5 11:16:56 2026 -0700

    Fix misaligned pointer use in BufferDetail.hh and BufferReader.hh (#3740)
---
 lang/c++/include/avro/buffer/BufferReader.hh        | 3 ++-
 lang/c++/include/avro/buffer/detail/BufferDetail.hh | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/lang/c++/include/avro/buffer/BufferReader.hh 
b/lang/c++/include/avro/buffer/BufferReader.hh
index 39b23fa708..a08dc25120 100644
--- a/lang/c++/include/avro/buffer/BufferReader.hh
+++ b/lang/c++/include/avro/buffer/BufferReader.hh
@@ -20,6 +20,7 @@
 #define avro_BufferReader_hh__
 
 #include "Buffer.hh"
+#include <cstring>
 #include <type_traits>
 
 #ifdef min
@@ -233,7 +234,7 @@ private:
         }
 
         if (sizeof(T) <= chunkRemaining()) {
-            val = *(reinterpret_cast<const T *>(addr()));
+            memcpy(&val, addr(), sizeof(T));
             incrementChunk(sizeof(T));
         } else {
             read(reinterpret_cast<data_type *>(&val), sizeof(T));
diff --git a/lang/c++/include/avro/buffer/detail/BufferDetail.hh 
b/lang/c++/include/avro/buffer/detail/BufferDetail.hh
index 56e86c8a22..0e746ab721 100644
--- a/lang/c++/include/avro/buffer/detail/BufferDetail.hh
+++ b/lang/c++/include/avro/buffer/detail/BufferDetail.hh
@@ -23,6 +23,7 @@
 #include <boost/asio/buffer.hpp>
 #endif
 #include <cassert>
+#include <cstring>
 #include <deque>
 #include <exception>
 #include <functional>
@@ -327,7 +328,7 @@ public:
         if (freeSpace_ && (sizeof(T) <= writeChunks_.front().freeSize())) {
             // fast path, there's enough room in the writeable chunk to just
             // straight out copy it
-            *(reinterpret_cast<T *>(writeChunks_.front().tellWritePos())) = 
val;
+            memcpy(writeChunks_.front().tellWritePos(), &val, sizeof(T));
             postWrite(sizeof(T));
         } else {
             // need to fixup chunks first, so use the regular memcpy

Reply via email to