Skip to content

AddressSanitizer: stack-use-after-return #589

Description

@firewave

From https://trac.cppcheck.net/ticket/14268.

#include "missing.h"

#define PREFIX_WITH_MACRO(test_name) Macro##test_name

TEST_P(PREFIX_WITH_MACRO(NamingTest), n) {}
$ ./simplecpp a.cpp -D"TEST_P(A,B)=void __ ## A ## _ ## B ( )" 
==153198==ERROR: AddressSanitizer: stack-use-after-return on address 0x7bb828201398 at pc 0x55c85b5c80b3 bp 0x7ffd401c95e0 sp 0x7ffd401c95d0
READ of size 8 at 0x7bb828201398 thread T0
    #0 0x55c85b5c80b2 in std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::size() const /usr/include/c++/15.2.1/bits/stl_vector.h:1119
    #1 0x55c85b5c80b2 in simplecpp::Location::file[abi:cxx11]() const /home/user/CLionProjects/simplecpp/simplecpp.h:108
    #2 0x55c85b5c80b2 in main /home/user/CLionProjects/simplecpp/main.cpp:210
    #3 0x7fb829c27674  (/usr/lib/libc.so.6+0x27674) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e)
    #4 0x7fb829c27728 in __libc_start_main (/usr/lib/libc.so.6+0x27728) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e)
    #5 0x55c85b5c8cf4 in _start (/home/user/CLionProjects/simplecpp/simplecpp+0x16cf4) (BuildId: 5a0940bf2b4df8317a2d3a027c16b44de010a853)

Address 0x7bb828201398 is located in stack of thread T0 at offset 5016 in frame
    #0 0x55c85b60336f in simplecpp::preprocess(simplecpp::TokenList&, simplecpp::TokenList const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, simplecpp::FileDataCache&, simplecpp::DUI const&, std::__cxx11::list<simplecpp::Output, std::allocator<simplecpp::Output> >*, std::__cxx11::list<simplecpp::MacroUsage, std::allocator<simplecpp::MacroUsage> >*, std::__cxx11::list<simplecpp::IfCond, std::allocator<simplecpp::IfCond> >*) /home/user/CLionProjects/simplecpp/simplecpp.cpp:3285

  This frame has 340 object(s):
    [32, 33) '<unknown>'
    [48, 49) '<unknown>'
    [64, 65) '<unknown>'
    [80, 81) '<unknown>'
    [96, 97) '<unknown>'
    [112, 113) '<unknown>'
    [128, 129) '<unknown>'
    [144, 145) '<unknown>'
    [160, 161) '<unknown>'
    [176, 177) '<unknown>'
    [192, 193) '<unknown>'
    [208, 209) '<unknown>'
    [224, 225) '<unknown>'
    [240, 241) '<unknown>'
    [256, 257) '<unknown>'
    [272, 273) '<unknown>'
    [288, 289) '<unknown>'
    [304, 305) '<unknown>'
    [320, 321) '<unknown>'
    [336, 337) '<unknown>'
    [352, 353) '<unknown>'
    [368, 369) '<unknown>'
    [384, 385) '<unknown>'
    [400, 401) '<unknown>'
    [416, 417) '<unknown>'
    [432, 433) '<unknown>'
    [448, 449) '<unknown>'
    [464, 465) '<unknown>'
    [480, 481) '<unknown>'
    [496, 497) '<unknown>'
    [512, 513) '<unknown>'
    [528, 529) '<unknown>'
    [544, 545) '<unknown>'
    [560, 561) '<unknown>'
    [576, 577) '<unknown>'
    [592, 593) '<unknown>'
    [608, 609) '<unknown>'
    [624, 625) '<unknown>'
    [640, 641) '<unknown>'
    [656, 657) '<unknown>'
    [672, 673) '<unknown>'
    [688, 689) '<unknown>'
    [704, 705) '<unknown>'
    [720, 721) '<unknown>'
    [736, 737) '<unknown>'
    [752, 753) '<unknown>'
    [768, 769) '__map_alloc'
    [784, 785) '<unknown>'
    [800, 801) '<unknown>'
    [816, 817) '<unknown>'
    [832, 833) '<unknown>'
    [848, 849) '<unknown>'
    [864, 865) '<unknown>'
    [880, 881) '<unknown>'
    [896, 897) '<unknown>'
    [912, 913) '<unknown>'
    [928, 929) '<unknown>'
    [944, 945) '__map_alloc'
    [960, 961) '__map_alloc'
    [976, 977) '__map_alloc'
    [992, 993) '<unknown>'
    [1008, 1009) '__map_alloc'
    [1024, 1025) '__map_alloc'
    [1040, 1041) '__map_alloc'
    [1056, 1057) '__lhs' (line 3284)
    [1072, 1073) '__lhs' (line 3284)
    [1088, 1092) '<unknown>'
    [1104, 1108) '<unknown>'
    [1120, 1124) '<unknown>'
    [1136, 1144) 'it' (line 3319)
    [1168, 1176) '<unknown>'
    [1200, 1208) '<unknown>'
    [1232, 1240) '<unknown>'
    [1264, 1272) '<unknown>'
    [1296, 1304) '<unknown>'
    [1328, 1336) '<unknown>'
    [1360, 1368) 'it' (line 3385)
    [1392, 1400) '<unknown>'
    [1424, 1432) '<unknown>'
    [1456, 1464) 'rawtok' (line 3393)
    [1488, 1496) '<unknown>'
    [1520, 1528) '<unknown>'
    [1552, 1560) 'it' (line 3453)
    [1584, 1592) '<unknown>'
    [1616, 1624) 'inctok' (line 3490)
    [1648, 1656) '<unknown>'
    [1680, 1688) '<unknown>'
    [1712, 1720) '<unknown>'
    [1744, 1752) '<unknown>'
    [1776, 1784) '<unknown>'
    [1808, 1816) '<unknown>'
    [1840, 1848) '<unknown>'
    [1872, 1880) '<unknown>'
    [1904, 1912) '<unknown>'
    [1936, 1944) 'tmp' (line 3659)
    [1968, 1976) 'macroIt' (line 3779)
    [2000, 2008) '<unknown>'
    [2032, 2040) '<unknown>'
    [2064, 2072) '<unknown>'
    [2096, 2104) '<unknown>'
    [2128, 2136) 'usageIt' (line 3784)
    [2160, 2168) '<unknown>'
    [2192, 2200) '<unknown>'
    [2224, 2232) '<unknown>'
    [2256, 2264) '<unknown>'
    [2288, 2296) '<unknown>'
    [2320, 2328) '<unknown>'
    [2352, 2360) '<unknown>'
    [2384, 2392) '<unknown>'
    [2416, 2424) '<unknown>'
    [2448, 2456) '<unknown>'
    [2480, 2488) '<unknown>'
    [2512, 2520) '<unknown>'
    [2544, 2552) '<unknown>'
    [2576, 2584) '<unknown>'
    [2608, 2616) '<unknown>'
    [2640, 2648) '<unknown>'
    [2672, 2680) '<unknown>'
    [2704, 2712) '<unknown>'
    [2736, 2744) '<unknown>'
    [2768, 2776) '<unknown>'
    [2800, 2808) '<unknown>'
    [2832, 2840) '<unknown>'
    [2864, 2872) '<unknown>'
    [2896, 2904) '<unknown>'
    [2928, 2936) '<unknown>'
    [2960, 2968) '<unknown>'
    [2992, 3000) '<unknown>'
    [3024, 3032) '<unknown>'
    [3056, 3064) '<unknown>'
    [3088, 3096) '<unknown>'
    [3120, 3128) '<unknown>'
    [3152, 3160) '<unknown>'
    [3184, 3192) '<unknown>'
    [3216, 3224) '<unknown>'
    [3248, 3256) '<unknown>'
    [3280, 3288) '<unknown>'
    [3312, 3320) '<unknown>'
    [3344, 3352) '<unknown>'
    [3376, 3384) '<unknown>'
    [3408, 3416) '<unknown>'
    [3440, 3448) '__an'
    [3472, 3480) 't' (line 3260)
    [3504, 3512) '<unknown>'
    [3536, 3544) '<unknown>'
    [3568, 3576) '__j'
    [3600, 3608) '<unknown>'
    [3632, 3640) '<unknown>'
    [3664, 3672) '<unknown>'
    [3696, 3704) '<unknown>'
    [3728, 3736) '<unknown>'
    [3760, 3768) '<unknown>'
    [3792, 3800) '<unknown>'
    [3824, 3832) '<unknown>'
    [3856, 3864) '<unknown>'
    [3888, 3896) '<unknown>'
    [3920, 3936) '<unknown>'
    [3952, 3968) '<unknown>'
    [3984, 4000) '<unknown>'
    [4016, 4032) '<unknown>'
    [4048, 4064) '<unknown>'
    [4080, 4096) '<unknown>'
    [4112, 4128) '<unknown>'
    [4144, 4160) '<unknown>'
    [4176, 4192) '<unknown>'
    [4208, 4224) '<unknown>'
    [4240, 4256) '<unknown>'
    [4272, 4288) '<unknown>'
    [4304, 4320) '<unknown>'
    [4336, 4352) '<unknown>'
    [4368, 4384) '<unknown>'
    [4400, 4416) '<unknown>'
    [4432, 4448) '<unknown>'
    [4464, 4480) '<unknown>'
    [4496, 4512) '<unknown>'
    [4528, 4544) '<unknown>'
    [4560, 4576) '<unknown>'
    [4592, 4608) '<unknown>'
    [4624, 4640) '<unknown>'
    [4656, 4672) '<unknown>'
    [4688, 4704) '__guard'
    [4720, 4736) '<unknown>'
    [4752, 4768) '__guard'
    [4784, 4800) '<unknown>'
    [4816, 4832) '__guard'
    [4848, 4864) '<unknown>'
    [4880, 4896) '__guard'
    [4912, 4928) '<unknown>'
    [4944, 4960) '__guard'
    [4976, 4992) '<unknown>'
    [5008, 5032) 'dummy' (line 3314) <== Memory access at offset 5016 is inside this variable
    [5072, 5096) '<unknown>'
    [5136, 5160) 'loc' (line 3755)
    [5200, 5224) 'usage' (line 3781)
    [5264, 5296) '__tmp'
    [5328, 5360) '__tmp'
    [5392, 5424) '__tmp'
    [5456, 5488) '__tmp'
    [5520, 5552) '__tmp'
    [5584, 5616) '__tmp'
    [5648, 5680) '__tmp'
    [5712, 5744) '__tmp'
    [5776, 5808) '__tmp'
    [5840, 5872) '__tmp'
    [5904, 5936) '__tmp'
    [5968, 6000) '__tmp'
    [6032, 6064) '__tmp'
    [6096, 6128) '__tmp'
    [6160, 6192) '__tmp'
    [6224, 6256) '__tmp'
    [6288, 6320) '__tmp'
    [6352, 6384) '<unknown>'
    [6416, 6448) '<unknown>'
    [6480, 6512) '<unknown>'
    [6544, 6576) '<unknown>'
    [6608, 6640) '<unknown>'
    [6672, 6704) '<unknown>'
    [6736, 6768) '<unknown>'
    [6800, 6832) '<unknown>'
    [6864, 6896) '<unknown>'
    [6928, 6960) '<unknown>'
    [6992, 7024) '<unknown>'
    [7056, 7088) '<unknown>'
    [7120, 7168) 'sizeOfType' (line 3291)
    [7200, 7248) 'pragmaOnce' (line 3382)
    [7280, 7328) 'maybeUsedMacros' (line 3391)
    [7360, 7416) 'macros' (line 3317)
    [7456, 7512) 'ltime' (line 3341)
    [7552, 7624) 'inc1' (line 3483)
    [7664, 7736) 'inc2' (line 3488)
    [7776, 7848) 'expr' (line 3576)
    [7888, 7960) 'tokens' (line 3756)
    [8000, 8080) 'ifstates' (line 3376)
    [8112, 8192) 'iftokens' (line 3377)
    [8224, 8304) 'includetokenstack' (line 3380)
    [8336, 8520) 'macro' (line 3330)
    [8592, 8776) '<unknown>'
    [8848, 9032) '<unknown>'
    [9104, 9288) '<unknown>'
    [9360, 9544) '<unknown>'
    [9616, 9800) '<unknown>'
    [9872, 10056) '<unknown>'
    [10128, 10312) '<unknown>'
    [10384, 10568) '<unknown>'
    [10640, 10824) '<unknown>'
    [10896, 11088) '<unknown>'
    [11152, 11344) '<unknown>'
    [11408, 11600) '<unknown>'
    [11664, 11856) '<unknown>'
    [11920, 12112) '<unknown>'
    [12176, 12368) '<unknown>'
    [12432, 12624) '<unknown>'
    [12688, 12720) '<unknown>'
    [12752, 12784) '<unknown>'
    [12816, 12848) '<unknown>'
    [12880, 12912) '<unknown>'
    [12944, 12976) 'macroname' (line 3323)
    [13008, 13040) 'lhs' (line 3328)
    [13072, 13104) 'rhs' (line 3329)
    [13136, 13168) '<unknown>'
    [13200, 13232) '<unknown>'
    [13264, 13296) '<unknown>'
    [13328, 13360) '<unknown>'
    [13392, 13424) '<unknown>'
    [13456, 13488) '<unknown>'
    [13520, 13552) '<unknown>'
    [13584, 13616) '<unknown>'
    [13648, 13680) '<unknown>'
    [13712, 13744) '<unknown>'
    [13776, 13808) '<unknown>'
    [13840, 13872) '<unknown>'
    [13904, 13936) '<unknown>'
    [13968, 14000) 'std_def' (line 3349)
    [14032, 14064) '<unknown>'
    [14096, 14128) '<unknown>'
    [14160, 14192) '<unknown>'
    [14224, 14256) 'std_def' (line 3366)
    [14288, 14320) '<unknown>'
    [14352, 14384) '<unknown>'
    [14416, 14448) '<unknown>'
    [14480, 14512) '<unknown>'
    [14544, 14576) 'msg' (line 3426)
    [14608, 14640) '<unknown>'
    [14672, 14704) '<unknown>'
    [14736, 14768) '<unknown>'
    [14800, 14832) '<unknown>'
    [14864, 14896) '<unknown>'
    [14928, 14960) '<unknown>'
    [14992, 15024) 'hdr' (line 3500)
    [15056, 15088) '<unknown>'
    [15120, 15152) 'header' (line 3527)
    [15184, 15216) '<unknown>'
    [15248, 15280) '<unknown>'
    [15312, 15344) '<unknown>'
    [15376, 15408) '<unknown>'
    [15440, 15472) '<unknown>'
    [15504, 15536) '<unknown>'
    [15568, 15600) '<unknown>'
    [15632, 15664) '<unknown>'
    [15696, 15728) '<unknown>'
    [15760, 15792) 'header' (line 3623)
    [15824, 15856) '<unknown>'
    [15888, 15920) 'header2' (line 3636)
    [15952, 15984) '<unknown>'
    [16016, 16048) '<unknown>'
    [16080, 16112) '<unknown>'
    [16144, 16176) '<unknown>'
    [16208, 16240) 'E' (line 3670)
    [16272, 16304) '<unknown>'
    [16336, 16368) 'msg' (line 3682)
    [16400, 16432) '<unknown>'
    [16464, 16496) '<unknown>'
    [16528, 16560) '<unknown>'
    [16592, 16624) '<unknown>'
    [16656, 16688) '<unknown>'
    [16720, 16752) 's' (line 3764)
    [16784, 16816) '<unknown>'
    [16848, 16880) '<unknown>'
    [16912, 16944) '<unknown>'
    [16976, 17008) '<unknown>'
    [17040, 17072) '<unknown>'
    [17104, 17168) 'err' (line 3356)
    [17200, 17264) 'err' (line 3413)
    [17296, 17360) 'err' (line 3433)
    [17392, 17456) 'err' (line 3461)
    [17488, 17552) 'out' (line 3472)
    [17584, 17648) 'err' (line 3513)
    [17680, 17744) 'out' (line 3531)
    [17776, 17840) 'out' (line 3540)
    [17872, 17936) 'out' (line 3555)
    [17968, 18032) 'out' (line 3601)
    [18064, 18128) 'out' (line 3644)
    [18160, 18224) 'out' (line 3685)
    [18256, 18344) 'mu' (line 3785)
    [18384, 18600) '<unknown>'
    [18672, 18888) '<unknown>'
    [18960, 19176) '<unknown>'
    [19248, 19768) 'f' (line 3635)
    [19904, 19913) 'buf' (line 3279)
    [19936, 19948) 'buf' (line 3272)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions