This is a well known (long standing) issue. Documented in the code base in commit eea02be70ee37b845f2719b3c08e5baf4b6f51f6.

Countless intermittent sanitizer warnings can be attributed to it.
public:
    
    virtual bool Complete() const = 0;
    
    virtual void SetVersion(int version) = 0;
    
    virtual int Read(const char *data, unsigned int bytes) = 0;
    
    virtual CNetMessage GetMessage(const CMessageHeader::MessageStartChars& message_start, int64_t time) = 0;
    virtual ~TransportDeserializer() {}
};
class V1TransportDeserializer final : public TransportDeserializer
{
private:
    mutable CHash256 hasher;
    mutable uint256 data_hash;
    bool in_data;                   
    CDataStream hdrbuf;             
    CMessageHeader hdr;             
    CDataStream vRecv;              
    unsigned int nHdrPos;
    unsigned int nDataPos;
    const uint256& GetMessageHash() const;
    int readHeader(const char *pch, unsigned int nBytes);
    int readData(const char *pch, unsigned int nBytes);
    void Reset() {