From: Tianjiao Yin Date: Fri, 19 Feb 2016 18:40:46 +0000 (-0800) Subject: fix dangling pointer bug in IPAddressV6 X-Git-Tag: deprecate-dynamic-initializer~57 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=ac31e5f5e80027418cb06a7718b6ade3cacad8bc;p=folly.git fix dangling pointer bug in IPAddressV6 Summary: `mask(numBits)` returns a temporary variable. After its lifetime ends, subbytes becomes a dangling pointer. Reviewed By: yfeldblum Differential Revision: D2953699 fb-gh-sync-id: 5d5a35716ecaa1b3d96edb5a459615756848b92f shipit-source-id: 5d5a35716ecaa1b3d96edb5a459615756848b92f --- diff --git a/folly/IPAddressV6.cpp b/folly/IPAddressV6.cpp index 290f1c0b..915767b4 100644 --- a/folly/IPAddressV6.cpp +++ b/folly/IPAddressV6.cpp @@ -374,8 +374,8 @@ const ByteArray16 IPAddressV6::fetchMask(size_t numBits) { // protected bool IPAddressV6::inBinarySubnet(const std::array addr, size_t numBits) const { - const unsigned char* subbytes = mask(numBits).bytes(); - return (std::memcmp(addr.data(), subbytes, 2) == 0); + auto masked = mask(numBits); + return (std::memcmp(addr.data(), masked.bytes(), 2) == 0); } // static private