git: 9front

Download patch

ref: 868d6671fae3f028b562af347f1608297ef53712
parent: 76449e97c9d3d5a76752ce4fd714544fcfd44f03
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Wed Nov 3 16:38:23 EDT 2021

ndb/dns: use decimal encoding for txt rr string escapes

rfc883 suggests to use decimal digits to escape txt rr strings,
and unix dig appears to use the same.
so change from octal to decimal.

--- a/sys/src/cmd/ndb/dblookup.c
+++ b/sys/src/cmd/ndb/dblookup.c
@@ -459,10 +459,10 @@
 		for(i = 0; i < n && sofar < len; i++){
 			uint c = pair->val[sofar++];
 			if(c == '\\' && sofar < len){
-				if(pair->val[sofar] >= '0' && pair->val[sofar] <= '7'){
+				if(pair->val[sofar] >= '0' && pair->val[sofar] <= '9'){
 					c = pair->val[sofar++] - '0';
-					while(pair->val[sofar] >= '0' && pair->val[sofar] <= '7')
-						c = (c << 3) | (pair->val[sofar++] - '0');
+					while(pair->val[sofar] >= '0' && pair->val[sofar] <= '9')
+						c = (c * 10) + (pair->val[sofar++] - '0');
 				} else {
 					c = pair->val[sofar++];
 				}
--- a/sys/src/cmd/ndb/dn.c
+++ b/sys/src/cmd/ndb/dn.c
@@ -1201,7 +1201,7 @@
  *  control characters and double quotes (") which would
  *  collide with ndb(6) format.
  *  escape special characters by encoding them as: \DDD
- *  where D is a octal digit. backslash (\) is escaped
+ *  where D is a decimal digit. backslash (\) is escaped
  *  by doubling. valid utf8 is encoded verbatim.
  */
 int
@@ -1227,7 +1227,7 @@
 		}
 		c = *data;
 		if(c < ' ' || c == '"' || c > '~')
-			out += fmtprint(f, "\\%.3o", c);
+			out += fmtprint(f, "\\%.3d", c);
 		else if(c == '\\')
 			out += fmtprint(f, "\\\\");
 		else
--