* [PATCH 2/5] hval: to_filename: return `undef' instead of empty string
2020-07-07 20:37 6% [PATCH 0/5] uninitialized vs blank fixes Eric Wong
@ 2020-07-07 20:37 7% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2020-07-07 20:37 UTC (permalink / raw)
To: meta
Returning an empty string for a filename makes no sense,
so instead return `undef' so the caller can setup a fallback
using the "//" operator.
This fixes uninitialized variable warnings because split()
on an empty string returns `undef', which caused to_filename
to warn on s// and tr// ops.
---
lib/PublicInbox/Hval.pm | 4 ++--
lib/PublicInbox/Mbox.pm | 4 ++--
lib/PublicInbox/MboxGz.pm | 3 +--
t/hval.t | 8 +++++---
4 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/lib/PublicInbox/Hval.pm b/lib/PublicInbox/Hval.pm
index 46a839160..e21a64a60 100644
--- a/lib/PublicInbox/Hval.pm
+++ b/lib/PublicInbox/Hval.pm
@@ -94,12 +94,12 @@ sub obfuscate_addrs ($$;$) {
# like format_sanitized_subject in git.git pretty.c with '%f' format string
sub to_filename ($) {
- my ($s, undef) = split(/\n/, $_[0]);
+ my $s = (split(/\n/, $_[0]))[0] // return; # empty string => undef
$s =~ s/[^A-Za-z0-9_\.]+/-/g;
$s =~ tr/././s;
$s =~ s/[\.\-]+\z//;
$s =~ s/\A[\.\-]+//;
- $s
+ $s eq '' ? undef : $s;
}
# convert a filename (or any string) to HTML attribute
diff --git a/lib/PublicInbox/Mbox.pm b/lib/PublicInbox/Mbox.pm
index 8726b9f64..115321c61 100644
--- a/lib/PublicInbox/Mbox.pm
+++ b/lib/PublicInbox/Mbox.pm
@@ -52,9 +52,9 @@ sub async_eml { # ->{async_eml} for async_blob_cb
sub res_hdr ($$) {
my ($ctx, $subject) = @_;
- my $fn = $subject // 'no-subject';
+ my $fn = $subject // '';
$fn =~ s/^re:\s+//i;
- $fn = $fn eq '' ? 'no-subject' : to_filename($fn);
+ $fn = to_filename($fn) // 'no-subject';
my @hdr = ('Content-Type');
if ($ctx->{-inbox}->{obfuscate}) {
# obfuscation is stupid, but maybe scrapers are, too...
diff --git a/lib/PublicInbox/MboxGz.pm b/lib/PublicInbox/MboxGz.pm
index fdd16f68e..967af9c68 100644
--- a/lib/PublicInbox/MboxGz.pm
+++ b/lib/PublicInbox/MboxGz.pm
@@ -24,8 +24,7 @@ sub mbox_gz {
$self->{cb} = $cb;
$self->{base_url} = $self->{-inbox}->base_url($self->{env});
$self->{gz} = PublicInbox::GzipFilter::gzip_or_die();
- $fn = to_filename($fn // 'no-subject');
- $fn = 'no-subject' if $fn eq '';
+ $fn = to_filename($fn // '') // 'no-subject';
# http://www.iana.org/assignments/media-types/application/gzip
bless $self, __PACKAGE__;
my $res_hdr = [ 'Content-Type' => 'application/gzip',
diff --git a/t/hval.t b/t/hval.t
index 38605c6f1..e80a02ff4 100644
--- a/t/hval.t
+++ b/t/hval.t
@@ -47,15 +47,17 @@ EOF
is($html, $exp, 'only obfuscated relevant addresses');
-is('foo-bar', PublicInbox::Hval::to_filename('foo bar '),
+is(PublicInbox::Hval::to_filename('foo bar '), 'foo-bar',
'to_filename has no trailing -');
-is('foo-bar', PublicInbox::Hval::to_filename("foo bar\nanother line\n"),
+is(PublicInbox::Hval::to_filename("foo bar\nanother line\n"), 'foo-bar',
'to_filename has no repeated -, and nothing past LF');
-is('foo.bar', PublicInbox::Hval::to_filename("foo....bar"),
+is(PublicInbox::Hval::to_filename("foo....bar"), 'foo.bar',
'to_filename squeezes -');
+is(PublicInbox::Hval::to_filename(''), undef, 'empty string returns undef');
+
my $s = "\0\x07\n";
PublicInbox::Hval::src_escape($s);
is($s, "\\0\\a\n", 'src_escape works as intended');
^ permalink raw reply related [relevance 7%]
* [PATCH 0/5] uninitialized vs blank fixes
@ 2020-07-07 20:37 6% Eric Wong
2020-07-07 20:37 7% ` [PATCH 2/5] hval: to_filename: return `undef' instead of empty string Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2020-07-07 20:37 UTC (permalink / raw)
To: meta
This quiets some uninitialized variable warnings in various
places and includes minor fixes around "//" vs "||".
Eric Wong (5):
viewvcs: allow "0" as a path name
hval: to_filename: return `undef' instead of empty string
viewvcs: stop checking unused "B" query parameter
imap: avoid warnings on non-slice mailboxes
wwwatomstream: avoid uninitialized warnings for $email
lib/PublicInbox/Hval.pm | 4 ++--
lib/PublicInbox/IMAP.pm | 1 +
lib/PublicInbox/Mbox.pm | 4 ++--
lib/PublicInbox/MboxGz.pm | 3 +--
lib/PublicInbox/SolverGit.pm | 2 +-
lib/PublicInbox/ViewVCS.pm | 8 +++++---
lib/PublicInbox/WWW.pm | 5 ++---
lib/PublicInbox/WwwAtomStream.pm | 13 +++++--------
t/hval.t | 8 +++++---
t/imapd.t | 4 ++++
10 files changed, 28 insertions(+), 24 deletions(-)
^ permalink raw reply [relevance 6%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2020-07-07 20:37 6% [PATCH 0/5] uninitialized vs blank fixes Eric Wong
2020-07-07 20:37 7% ` [PATCH 2/5] hval: to_filename: return `undef' instead of empty string 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).