BACnet Protocol Stack library provides a BACnet application layer, network layer and media access (MAC) layer communications services. In 1.4.2, 1.5.0.rc2, and earlier, an off-by-one stack-based buffer overflow in the ubasic interpreter causes a crash (SIGABRT) when processing string literals longer than the buffer limit. The tokenizer_string function in src/bacnet/basic/program/ubasic/tokenizer.c incorrectly handles null termination for maximum-length strings. It writes a null byte to dest[40] when the buffer size is only 40 (indices 0-39), triggering a stack overflow.
{
"cwe_ids": [
"CWE-193"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/21xxx/CVE-2026-21870.json"
}"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-21870.json"
[
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"268571434227646967484741613713081181267",
"66049829109093423262403396779317622279",
"268426914691437343662859404059831600636",
"179126969254820620325425943426790076190",
"300800807772556864882382805530948845350",
"212374737158372659891933244806355120714",
"271165173180689709427611890846716604502",
"334185405908682284023009643102449008729",
"122171342807595637935475239499285369708",
"999604187978949026867581878965938259"
]
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Line",
"id": "CVE-2026-21870-0a329910",
"target": {
"file": "src/bacnet/basic/program/ubasic/tokenizer.c"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "16864189424846766998519240032671461349",
"length": 678.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-0e91c448",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.c",
"function": "ubasic_set_stringvariable"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "106450760621600006785808774156998722393",
"length": 649.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-172696f1",
"target": {
"file": "src/bacnet/basic/program/ubasic/tokenizer.c",
"function": "tokenizer_label"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "239868434369751596698359495392642578950",
"length": 209.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-20127a70",
"target": {
"file": "test/bacnet/basic/program/ubasic/src/main.c",
"function": "test_main"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "233959223001149785113781613902604496948",
"length": 2871.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-621f3e9a",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.c",
"function": "sfactor"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "219055107226596348300794027076378016642",
"length": 674.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-7844837f",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.c",
"function": "gosub_statement"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "231947863029126635444599592353150603624",
"length": 1463.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-7a023963",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.c",
"function": "print_statement"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "319031664088983570049637659029487596884",
"length": 476.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-9f817f2d",
"target": {
"file": "src/bacnet/basic/program/ubasic/tokenizer.c",
"function": "tokenizer_string"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "143744288611743522041784402896889984154",
"length": 428.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-a061011e",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.c",
"function": "goto_statement"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"185192068515200243317719005051391423374",
"18372526778011214907733358338327208840",
"151625819221219026294133819112498078706",
"233052117977694228678684562570827307677",
"77647574995794514302663389296836762506",
"94372862330386996004021116323684167914",
"38555877562259020476392597473100712201",
"246645338820522943877864029190881994662"
]
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Line",
"id": "CVE-2026-21870-b4bb01be",
"target": {
"file": "test/bacnet/basic/program/ubasic/src/main.c"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "178452635109548091355780555865754314966",
"length": 446.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-b655339d",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.c",
"function": "sstr"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"16839103218966521910368569511258647381",
"102019313679159517104288085105032425030",
"135191259301589308803305154743265386079",
"222651379966780002980117789567273027135"
]
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Line",
"id": "CVE-2026-21870-bc6d0230",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.h"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"261550462814948032226514703071692081776",
"266328393438246115090586541488193679607",
"155251982352647768089270030364148690478",
"119100357468162477860740606392832449736",
"336670016302764555602247042922052005846",
"272234848032318879330827355452839410327",
"124523986055790067317839295516083016404",
"294620568745504417762758335050544526135",
"331182912543706864680430455876101258068",
"311066733298483043676363969776406741929",
"82392493809651133411319496789555376367",
"49818698490395156918436906020564192823",
"178833199272412911793835016891385651875",
"229698499130674987337009280937121101276",
"226699206932483614684607494009073112676",
"301077667400026570151201856093305520303",
"125227264247135516983488968849986098690",
"325874258756208221490762100482019542465",
"66254942063897217795484161531332495289",
"45798999308810932141465118946524959078",
"294014827361262860264911084521830879937",
"246636797501325655170840261746367367638",
"85480308721836708294139053169022338830",
"91476818415920556804758610934294451670",
"65580090695485172815394976630649042074",
"226314055141489486696696244911808042008",
"224598344323671798477339339994041974036",
"212856818830054655059530645087780533390",
"275623382715815357678665669477072063045",
"173031321833555927572898273446484296045",
"134432725416240297919760209108393700738",
"293749522692757184557499745415242951933",
"284236061684295111329557812704371780840",
"321245524102231321169348148636382971655",
"193942409642644403187253557477497035181",
"9839018956358840824570560303148273350",
"129275822257619387880450702868696480124",
"94029112784686059763989470477476300060",
"202773833534427040489453551922104864127",
"241849687303829704306028721926677913753",
"174646576216649279212751911688740353693",
"58787605669964912720612098845174995942",
"8480291230977069012100122230276225240",
"264455261455114723486810490295564383218",
"95512304555341811007081537875576571301",
"269972906028482552078717912041874299554",
"118694045495763243262696025226607568979",
"24172263939593571214703404873767207945",
"169859371029657478438693029607411079245",
"7537424117163779913903429284518164892",
"70275837327004076399758503211176940814",
"94478831899196547860442649625155420826",
"124741618174533511620033875902376981956",
"122460200023402678436191208305802272391",
"143828921288010624085300014161061679888",
"200029923866533257827019523943267102367",
"49309547524199436397764333914125456186",
"329360828381726177646214427715321487675",
"153438203542127453220375240721525918331",
"136561496491150929058408779635898402058",
"258235178431920295880534814938789396357",
"309280534826923030639801939482833698975",
"49549377872357956138553540392928081875",
"284379159585385507574498159403790763268",
"206145585479141660574651913168322232594",
"297727991338048546307041102005285510860",
"145995561972376881377292911748053936481",
"64742743856614074054065702033101702915",
"203208346236258261876963596148858265917",
"135836436927145441260141482551988279652",
"198594934573710815658593711897207572204",
"296928052759077634103196289195745100028",
"248618661783927081376352133494872751972",
"76597029827367220519216249632813065122",
"279628858084780035285243297410993117049",
"26105991753018357085140989114988533029",
"46659697929270202287585433562758516733",
"76683689162057171186486868252817941542",
"223682596731253704932950106989069315989",
"107507754838305902424578058505402234938",
"132171356575992311134618903715897586863",
"24830552619522969335852819702277892685",
"230184865615652972282530801419788338629",
"280129812326797118165000630814716708435",
"83098356279886026848326553130285595745"
]
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Line",
"id": "CVE-2026-21870-c1a8f888",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.c"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "115161090357175604030176847755049633755",
"length": 1115.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-c1f9a4f1",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.c",
"function": "serial_getline_completed"
}
},
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"function_hash": "199982694720377656989883491313299644742",
"length": 439.0
},
"source": "https://github.com/bacnet-stack/bacnet-stack/commit/4e1176394a5ae50d2fd0b5790d9bff806dc08465",
"signature_type": "Function",
"id": "CVE-2026-21870-cdd09aaf",
"target": {
"file": "src/bacnet/basic/program/ubasic/ubasic.c",
"function": "ubasic_get_stringvariable"
}
}
]