user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* git SHA-256, perl 5.12, FUSE...
@ 2021-11-05 21:13  5% Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2021-11-05 21:13 UTC (permalink / raw)
  To: meta

All of these will probably be in the future of public-inbox;
but I think I'm going to goof off with these in a
yet-to-be-announced AGPL project, first...

A bit tired after the 1.7 cycle and need a short break that
doesn't involve TCP (yet).  But I've already found+fixed several
things related to public-inbox while half-way working on
aforementioned project:

public-inbox.git
54bc9f163df41423 (git: fix numerous bugs in git_quote and git_unquote, 2021-05-09)

git.git
00bc8390d8cd764c (remote-curl: fix clone on sha256 repos, 2021-05-11)

^ permalink raw reply	[relevance 5%]

* [PATCH] git: fix numerous bugs in git_quote and git_unquote
@ 2021-05-09 11:16  7% Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2021-05-09 11:16 UTC (permalink / raw)
  To: meta

git always quotes with leading zeros to ensure the octal
representation is 3 characters long.  We enforce that to match
low ASCII characters (e.g. [x01-\x06]) that don't need the
range provided by 3 characters.

git_unquote now does a single pass so it won't get fooled by
decoded backslashes into parsing a digit as an octal character.
git_unquote is also capped to "\377" so we don't overflow a
byte.
---
 lib/PublicInbox/Git.pm | 5 ++---
 t/git.t                | 2 ++
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm
index 96ac17a3..e557f6d6 100644
--- a/lib/PublicInbox/Git.pm
+++ b/lib/PublicInbox/Git.pm
@@ -50,14 +50,13 @@ my %ESC_GIT = map { $GIT_ESC{$_} => $_ } keys %GIT_ESC;
 sub git_unquote ($) {
 	return $_[0] unless ($_[0] =~ /\A"(.*)"\z/);
 	$_[0] = $1;
-	$_[0] =~ s/\\([\\"abfnrtv])/$GIT_ESC{$1}/g;
-	$_[0] =~ s/\\([0-7]{1,3})/chr(oct($1))/ge;
+	$_[0] =~ s!\\([\\"abfnrtv]|[0-3][0-7]{2})!$GIT_ESC{$1}//chr(oct($1))!ge;
 	$_[0];
 }
 
 sub git_quote ($) {
 	if ($_[0] =~ s/([\\"\a\b\f\n\r\t\013]|[^[:print:]])/
-		      '\\'.($ESC_GIT{$1}||sprintf("%0o",ord($1)))/egs) {
+		      '\\'.($ESC_GIT{$1}||sprintf("%03o",ord($1)))/egs) {
 		return qq{"$_[0]"};
 	}
 	$_[0];
diff --git a/t/git.t b/t/git.t
index 4a45bbaf..bc1dea50 100644
--- a/t/git.t
+++ b/t/git.t
@@ -168,5 +168,7 @@ is(git_quote($s = "Eléanor"), '"El\\303\\251anor"', 'quoted octal');
 is(git_quote($s = "hello\"world"), '"hello\"world"', 'quoted dq');
 is(git_quote($s = "hello\\world"), '"hello\\\\world"', 'quoted backslash');
 is(git_quote($s = "hello\nworld"), '"hello\\nworld"', 'quoted LF');
+is(git_quote($s = "hello\x06world"), '"hello\\006world"', 'quoted \\x06');
+is(git_unquote($s = '"hello\\006world"'), "hello\x06world", 'unquoted \\x06');
 
 done_testing();

^ permalink raw reply related	[relevance 7%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2021-05-09 11:16  7% [PATCH] git: fix numerous bugs in git_quote and git_unquote Eric Wong
2021-11-05 21:13  5% git SHA-256, perl 5.12, FUSE Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).