From 50e2c9b4d47c8a14f9b921d716f2cd070a4aabcd Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Tue, 1 Apr 2014 06:04:00 +0200 Subject: sam, acme: fix character classes quoting for 21-bit runes quote handling was broken with 21-bit runes. nextrec() returned quoted rune as long rune | (Runemax+1) to escape it. with 16-bit runes, storing that long into 16-bit Rune would automatically remove the escaping, but with 21-bit runes, Rune is uint32 so the escaping would remain. we now use (Runemask+1) instead, and mask the escaping off explicitely when storing back to Rune. --- sys/src/cmd/sam/regexp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'sys/src/cmd/sam/regexp.c') diff --git a/sys/src/cmd/sam/regexp.c b/sys/src/cmd/sam/regexp.c index 2bf540636..a5eddd608 100644 --- a/sys/src/cmd/sam/regexp.c +++ b/sys/src/cmd/sam/regexp.c @@ -462,7 +462,7 @@ nextrec(void){ exprp++; return '\n'; } - return *exprp++|(Runemax+1); + return *exprp++|(Runemask+1); } return *exprp++; } @@ -498,11 +498,11 @@ bldcclass(void) if((c2 = nextrec()) == ']') goto Error; classp[n+0] = Runemax; - classp[n+1] = c1; - classp[n+2] = c2; + 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){ -- cgit v1.2.3