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: |
* [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).