Skip to content

AddressSanitizer: stack-use-after-return #589

@firewave

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)

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions