The code assumes runes are 16 bits long, not 21, creating faulting code parsing classes. I.e. '/[\-]' will not match '-'.
This is the same fix already in 9front. http://adr.freeshell.org/plan9/patches/sam_fix_metachars_on_classes.diff --- /sys/src/cmd/sam/regexp.c Tue Apr 23 19:06:01 2013 +++ regexp.c Tue Nov 23 15:01:18 2021 @@ -53,8 +53,8 @@ /* * Actions and Tokens * - * 0x100xx are operators, value == precedence - * 0x200xx are tokens, i.e. operands for operators + * 0x2000xx are operators, value == precedence + * 0x3000xx are tokens, i.e. operands for operators */ enum { OPERATOR = Runemask+1, /* Bitmask of all operators */ @@ -462,7 +462,8 @@ exprp++; return '\n'; } - return *exprp++|(Runemax+1); + /* add a flag so metacharacters aren't interpreted */ + return *exprp++|(Runemask+1); } return *exprp++; } @@ -498,11 +499,12 @@ if((c2 = nextrec()) == ']') goto Error; classp[n+0] = Runemax; - classp[n+1] = c1; - classp[n+2] = c2; + /* remove possible flag from nextrec() */ + classp[n+1] = c1 & Runemask; + classp[n+2] = c2 & Runemask; n += 3; }else - classp[n++] = c1; + classp[n++] = c1 & Runemask; } classp[n] = 0; if(nclass == Nclass){ ------------------------------------------ 9fans: 9fans Permalink: https://9fans.topicbox.com/groups/9fans/Tccbdb20b670003a1-M5d4e6bea6c6908b388e51f0c Delivery options: https://9fans.topicbox.com/groups/9fans/subscription