{"id":"https://openalex.org/W7166730383","doi":"https://doi.org/10.1145/3797066","title":"SnakeCharmer: Automatic Fuzzing Harness Generation for Pure and Hybrid Python Libraries","display_name":"SnakeCharmer: Automatic Fuzzing Harness Generation for Pure and Hybrid Python Libraries","publication_year":2026,"publication_date":"2026-06-30","ids":{"openalex":"https://openalex.org/W7166730383","doi":"https://doi.org/10.1145/3797066"},"language":"en","primary_location":{"id":"doi:10.1145/3797066","is_oa":true,"landing_page_url":"https://doi.org/10.1145/3797066","pdf_url":null,"source":{"id":"https://openalex.org/S4404663975","display_name":"Proceedings of the ACM on software engineering.","issn_l":"2994-970X","issn":["2994-970X"],"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the ACM on Software Engineering","raw_type":"journal-article"},"type":"article","indexed_in":["crossref"],"open_access":{"is_oa":true,"oa_status":"hybrid","oa_url":"https://doi.org/10.1145/3797066","any_repository_has_fulltext":false},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5118596368","display_name":"Gabriel Sherman","orcid":null},"institutions":[{"id":"https://openalex.org/I223532165","display_name":"University of Utah","ror":"https://ror.org/03r0ha626","country_code":"US","type":"education","lineage":["https://openalex.org/I223532165"]}],"countries":["US"],"is_corresponding":false,"raw_author_name":"Gabriel Sherman","raw_affiliation_strings":["University of Utah, Salt Lake City, USA"],"raw_orcid":"https://orcid.org/0009-0000-5569-3535","affiliations":[{"raw_affiliation_string":"University of Utah, Salt Lake City, USA","institution_ids":["https://openalex.org/I223532165"]}]},{"author_position":"last","author":{"id":"https://openalex.org/A5088758050","display_name":"Stefan Nagy","orcid":"https://orcid.org/0000-0003-0220-1706"},"institutions":[{"id":"https://openalex.org/I223532165","display_name":"University of Utah","ror":"https://ror.org/03r0ha626","country_code":"US","type":"education","lineage":["https://openalex.org/I223532165"]}],"countries":["US"],"is_corresponding":false,"raw_author_name":"Stefan Nagy","raw_affiliation_strings":["University of Utah, Salt Lake City, USA"],"raw_orcid":"https://orcid.org/0000-0003-0220-1706","affiliations":[{"raw_affiliation_string":"University of Utah, Salt Lake City, USA","institution_ids":["https://openalex.org/I223532165"]}]}],"institutions":[],"countries_distinct_count":1,"institutions_distinct_count":1,"corresponding_author_ids":[],"corresponding_institution_ids":["https://openalex.org/I223532165"],"apc_list":null,"apc_paid":null,"fwci":0.0,"has_fulltext":false,"cited_by_count":0,"citation_normalized_percentile":{"value":0.84011628,"is_in_top_1_percent":false,"is_in_top_10_percent":false},"cited_by_percentile_year":null,"biblio":{"volume":"3","issue":"FSE","first_page":"69","last_page":"91"},"is_retracted":false,"is_paratext":false,"is_xpac":false,"primary_topic":{"id":"https://openalex.org/T10743","display_name":"Software Testing and Debugging Techniques","score":0.9815999865531921,"subfield":{"id":"https://openalex.org/subfields/1712","display_name":"Software"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},"topics":[{"id":"https://openalex.org/T10743","display_name":"Software Testing and Debugging Techniques","score":0.9815999865531921,"subfield":{"id":"https://openalex.org/subfields/1712","display_name":"Software"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T10260","display_name":"Software Engineering Research","score":0.010099999606609344,"subfield":{"id":"https://openalex.org/subfields/1710","display_name":"Information Systems"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T12127","display_name":"Software System Performance and Reliability","score":0.00139999995008111,"subfield":{"id":"https://openalex.org/subfields/1705","display_name":"Computer Networks and Communications"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}}],"keywords":[{"id":"https://openalex.org/keywords/python","display_name":"Python (programming language)","score":0.9322999715805054},{"id":"https://openalex.org/keywords/fuzz-testing","display_name":"Fuzz testing","score":0.6802999973297119},{"id":"https://openalex.org/keywords/correctness","display_name":"Correctness","score":0.46239998936653137},{"id":"https://openalex.org/keywords/software","display_name":"Software","score":0.40720000863075256},{"id":"https://openalex.org/keywords/mit-license","display_name":"MIT License","score":0.3806000053882599},{"id":"https://openalex.org/keywords/random-testing","display_name":"Random testing","score":0.3763999938964844},{"id":"https://openalex.org/keywords/unit-testing","display_name":"Unit testing","score":0.37130001187324524}],"concepts":[{"id":"https://openalex.org/C519991488","wikidata":"https://www.wikidata.org/wiki/Q28865","display_name":"Python (programming language)","level":2,"score":0.9322999715805054},{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.7742000222206116},{"id":"https://openalex.org/C111065885","wikidata":"https://www.wikidata.org/wiki/Q1189053","display_name":"Fuzz testing","level":3,"score":0.6802999973297119},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.6668999791145325},{"id":"https://openalex.org/C55439883","wikidata":"https://www.wikidata.org/wiki/Q360812","display_name":"Correctness","level":2,"score":0.46239998936653137},{"id":"https://openalex.org/C2777904410","wikidata":"https://www.wikidata.org/wiki/Q7397","display_name":"Software","level":2,"score":0.40720000863075256},{"id":"https://openalex.org/C115903868","wikidata":"https://www.wikidata.org/wiki/Q80993","display_name":"Software engineering","level":1,"score":0.3984000086784363},{"id":"https://openalex.org/C174183944","wikidata":"https://www.wikidata.org/wiki/Q334661","display_name":"MIT License","level":3,"score":0.3806000053882599},{"id":"https://openalex.org/C106159264","wikidata":"https://www.wikidata.org/wiki/Q17146789","display_name":"Random testing","level":4,"score":0.3763999938964844},{"id":"https://openalex.org/C148027188","wikidata":"https://www.wikidata.org/wiki/Q907375","display_name":"Unit testing","level":3,"score":0.37130001187324524},{"id":"https://openalex.org/C111919701","wikidata":"https://www.wikidata.org/wiki/Q9135","display_name":"Operating system","level":1,"score":0.3125999867916107},{"id":"https://openalex.org/C136764020","wikidata":"https://www.wikidata.org/wiki/Q466","display_name":"World Wide Web","level":1,"score":0.274399995803833},{"id":"https://openalex.org/C170130773","wikidata":"https://www.wikidata.org/wiki/Q216378","display_name":"Usability","level":2,"score":0.2653999924659729},{"id":"https://openalex.org/C43126263","wikidata":"https://www.wikidata.org/wiki/Q128751","display_name":"Source code","level":2,"score":0.26339998841285706},{"id":"https://openalex.org/C197129107","wikidata":"https://www.wikidata.org/wiki/Q1921621","display_name":"Merge (version control)","level":2,"score":0.2612999975681305},{"id":"https://openalex.org/C2777230681","wikidata":"https://www.wikidata.org/wiki/Q7923820","display_name":"Vetting","level":2,"score":0.2547999918460846},{"id":"https://openalex.org/C544833334","wikidata":"https://www.wikidata.org/wiki/Q2005","display_name":"JavaScript","level":2,"score":0.2547000050544739},{"id":"https://openalex.org/C61423126","wikidata":"https://www.wikidata.org/wiki/Q187432","display_name":"Scripting language","level":2,"score":0.25189998745918274}],"mesh":[],"locations_count":1,"locations":[{"id":"doi:10.1145/3797066","is_oa":true,"landing_page_url":"https://doi.org/10.1145/3797066","pdf_url":null,"source":{"id":"https://openalex.org/S4404663975","display_name":"Proceedings of the ACM on software engineering.","issn_l":"2994-970X","issn":["2994-970X"],"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the ACM on Software Engineering","raw_type":"journal-article"}],"best_oa_location":{"id":"doi:10.1145/3797066","is_oa":true,"landing_page_url":"https://doi.org/10.1145/3797066","pdf_url":null,"source":{"id":"https://openalex.org/S4404663975","display_name":"Proceedings of the ACM on software engineering.","issn_l":"2994-970X","issn":["2994-970X"],"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the ACM on Software Engineering","raw_type":"journal-article"},"sustainable_development_goals":[{"display_name":"Life in Land","id":"https://metadata.un.org/sdg/15","score":0.46738868951797485}],"awards":[{"id":"https://openalex.org/G6769771232","display_name":"CICI: TCR: Practical, Systematic Fuzz Testing for Securing Scientific Software","funder_award_id":"2419798","funder_id":"https://openalex.org/F4320306076","funder_display_name":"National Science Foundation"},{"id":"https://openalex.org/G6837348146","display_name":null,"funder_award_id":"GR105409-SUB00001384","funder_id":"https://openalex.org/F4320332180","funder_display_name":"Defense Advanced Research Projects Agency"}],"funders":[{"id":"https://openalex.org/F4320306076","display_name":"National Science Foundation","ror":"https://ror.org/021nxhr62"},{"id":"https://openalex.org/F4320332180","display_name":"Defense Advanced Research Projects Agency","ror":"https://ror.org/02caytj08"}],"has_content":{"pdf":false,"grobid_xml":false},"content_urls":null,"referenced_works_count":0,"referenced_works":[],"related_works":[],"abstract_inverted_index":{"With":[0],"Python\u2019s":[1],"rising":[2],"popularity,":[3],"ensuring":[4],"the":[5,33,46,99,126,159,229,236,241,265,276,312,316],"correctness":[6],"of":[7,11,35,101,138,233,244,300,315,350],"its":[8,55,173],"ever-growing":[9],"ecosystem":[10,141],"software":[12,29],"libraries":[13,79],"is":[14,61],"more":[15,333],"critical":[16,121],"than":[17,337],"ever.":[18],"Recently,":[19],"fuzzing":[20,234,253,317],"has":[21,53],"become":[22],"a":[23,348],"de":[24],"facto":[25],"technique":[26],"for":[27,65,76,115,133,165],"vetting":[28],"libraries,":[30,154,292],"enabled":[31],"via":[32],"use":[34],"harnesses:":[36],"small":[37],"wrapper":[38],"programs":[39],"that":[40,218],"inject":[41],"fuzzer-generated":[42],"test":[43],"cases":[44],"into":[45],"library":[47,212,238,335],"under":[48],"test.":[49],"While":[50],"harness":[51,162],"creation":[52],"shed":[54],"reliance":[56],"on":[57],"human":[58],"expertise":[59],"and":[60,70,105,124,129,148,168,188,199,210,231,273,275,297,302,310,323,331,340],"now":[62],"fully":[63],"automated":[64,161,242],"languages":[66],"such":[67],"as":[68,80,82,343,345],"C":[69],"C++,":[71],"Python":[72,78,86,116,140,153,170,187,237,252,261,291,334],"remains":[73],"uniquely":[74],"challenging\u2014both":[75],"pure":[77,167],"well":[81,344],"hybrid":[83,169],"ones":[84],"combining":[85],"with":[87,195,354],"native":[88,189],"C/C++":[89],"extensions\u2014due":[90],"to":[91,118,179,250],"(1)":[92],"limited":[93],"visibility":[94],"across":[95,152,235],"language":[96],"boundaries,":[97],"(2)":[98],"absence":[100],"reliable":[102],"bug":[103],"oracles,":[104],"(3)":[106],"incomplete":[107],"type":[108,197],"information.":[109],"Consequently,":[110],"attempts":[111],"at":[112],"automating":[113],"harnessing":[114,285],"fail":[117],"both":[119,166,186,271],"uphold":[120],"runtime":[122],"behaviors":[123],"produce":[125],"structured":[127],"call":[128],"data":[130],"flows":[131],"needed":[132],"effective":[134],"fuzzing,":[135,203],"leaving":[136],"much":[137],"today\u2019s":[139,259],"largely":[142],"unvetted.":[143],"To":[144],"overcome":[145],"these":[146,225],"challenges":[147],"broaden":[149],"fuzzing\u2019s":[150],"reach":[151],"this":[155],"paper":[156],"introduces":[157],"SnakeCharmer:":[158],"first":[160,180],"generation":[163],"approach":[164],"libraries.":[171],"At":[172],"core,":[174],"SnakeCharmer":[175,204,257,293,327],"leverages":[176],"static":[177],"analysis":[178],"capture":[181],"key":[182],"interface":[183],"information":[184,198],"from":[185,270,319],"code":[190,247,313],"components,":[191],"subsequently":[192],"enriching":[193],"it":[194],"runtime-captured":[196],"exception":[200],"behaviors.":[201],"During":[202],"further":[205,305],"distinguishes":[206],"between":[207],"expected":[208],"exceptions":[209,217],"true":[211],"bugs,":[213,353],"filtering":[214],"out":[215],"benign":[216],"would":[219],"otherwise":[220],"derail":[221],"testing":[222],"progress.":[223],"Together,":[224],"techniques":[226],"significantly":[227],"enhance":[228],"scope":[230],"effectiveness":[232],"ecosystem,":[239],"enabling":[240],"discovery":[243],"bugs":[245,336],"in":[246],"previously":[248],"inaccessible":[249],"existing":[251],"efforts.":[254],"We":[255],"evaluate":[256],"alongside":[258],"leading":[260],"auto-harnessing":[262],"approach,":[263,286],"PyRTFuzz;":[264],"actively":[266],"fuzzed":[267],"expert-written":[268],"harnesses":[269,277,318,342],"OSS-Fuzz":[272],"PolyFuzz;":[274],"generated":[278],"by":[279,360],"Google\u2019s":[280],"own":[281],"state-of-the-art":[282],"LLM-driven":[283],"automatic":[284],"OSS-Fuzz-Gen.":[287],"Across":[288],"21":[289],"diverse":[290],"attains":[294],"type-recovery":[295],"precision":[296],"exception-filtering":[298],"accuracy":[299],"95%":[301],"97%,":[303],"respectively,":[304],"attaining":[306],"1.48\u00d7,":[307],"1.87\u00d7,":[308],"1.78\u00d7,":[309],"1.40\u00d7":[311],"coverage":[314],"PyRTFuzz,":[320,346],"OSS-Fuzz,":[321],"PolyFuzz,":[322],"OSS-Fuzz-Gen,":[324],"respectively.":[325],"Further,":[326],"finds":[328],"16,":[329],"24,":[330],"24":[332],"all":[338],"expert-":[339],"LLM-created":[341],"respectively\u2014uncovering":[347],"total":[349],"20":[351],"new":[352],"18":[355],"since":[356],"confirmed":[357],"or":[358],"fixed":[359],"developers.":[361]},"counts_by_year":[],"updated_date":"2026-07-02T06:12:58.138171","created_date":"2026-07-01T00:00:00"}
