From bb95133fcfbd4698daa59debdbaa73a4d1e6252a Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 2 Nov 2009 18:15:02 +0000 Subject: [PATCH] Better error messages from commod-update-receiver --- yarrg/Commods.pm | 22 ++++++++++++++++------ yarrg/TODO | 3 --- yarrg/commod-update-receiver | 6 +++--- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/yarrg/Commods.pm b/yarrg/Commods.pm index c6ed253..b7b18a6 100644 --- a/yarrg/Commods.pm +++ b/yarrg/Commods.pm @@ -40,7 +40,7 @@ BEGIN { %oceans %commods %clients %commodclasses %vessels %shotname2damage &parse_pctb_commodmap %pctb_commodmap @pctb_commodmap - &get_our_version &check_tsv_line + &get_our_version &check_tsv_line &errsan &pipethrough_prep &pipethrough_run &pipethrough_run_along &pipethrough_run_finish &pipethrough_run_gzip &http_useragent &version_core @@ -406,6 +406,12 @@ sub cgipostform ($$$) { our %check_tsv_done; +sub errsan ($) { + my ($value) = @_; + $value =~ s/[^-+\'. A-Za-z0-9]/ sprintf "\\x%02x",ord $& /ge; + return "\"$value\""; +} + sub check_tsv_line ($$) { my ($l, $bad_data_callback) = @_; my $bad_data= sub { &$bad_data_callback("bad data: line $.: $_[0]"); }; @@ -419,15 +425,19 @@ sub check_tsv_line ($$) { !keys %commods or defined $commods{$commod} or - &$bad_data("unknown commodity \`$commod'"); + &$bad_data("unknown commodity ".errsan($commod)); - $stall =~ m/^\p{IsUpper}|^[0-9]/ or &$bad_data("stall not capitalised"); - !exists $check_tsv_done{$commod,$stall} or &$bad_data("repeated data"); + $stall =~ m/^\p{IsUpper}|^[0-9]/ or + &$bad_data("stall not capitalised ".errsan($stall)); + !exists $check_tsv_done{$commod,$stall} or + &$bad_data("repeated data ".errsan($commod).",".errsan($stall)); $check_tsv_done{$commod,$stall}= 1; foreach my $i (2..5) { my $f= $v[$i]; - $f =~ m/^(|0|[1-9][0-9]{0,5}|\>1000)$/ or &$bad_data("bad field $i"); - ($i % 2) or ($f !~ m/\>/) or &$bad_data("> in field $i price"); + $f =~ m/^(|0|[1-9][0-9]{0,5}|\>1000)$/ or + &$bad_data("bad field $i ".errsan($f)); + ($i % 2) or ($f !~ m/\>/) or + &$bad_data("> in field $i price ".errsan($f)); } foreach my $i (2,4) { diff --git a/yarrg/TODO b/yarrg/TODO index b6d8059..e8edb94 100644 --- a/yarrg/TODO +++ b/yarrg/TODO @@ -8,9 +8,6 @@ windows uploader DATABASE/DICTIONARY MANAGER --------------------------- -when update rejected print better error message including - broken commodity name - support Opal and Jade (currently there are some unicode problems) WEBSITE diff --git a/yarrg/commod-update-receiver b/yarrg/commod-update-receiver index e03a918..123ca0c 100755 --- a/yarrg/commod-update-receiver +++ b/yarrg/commod-update-receiver @@ -93,7 +93,7 @@ addlog("receiving"); $o{'clientname'}= must_param('clientname',$re_any); my $clientinfo= $clients{$o{'clientname'}}; -fail('unknown client') unless defined $clientinfo; +fail('unknown client '.errsan($o{'clientname'})) unless defined $clientinfo; my $clientfixes= must_param('clientfixes', "^([-0-9a-z ]*)\$"); my @clientfixes= sort grep { m/./ } split /\s+/, $clientfixes; @@ -115,7 +115,7 @@ $o{'ocean'}= must_param('ocean', $re_any); $o{'island'}= must_param('island', $re_any); my $arches= $oceans{$o{'ocean'}}; -fail("unknown ocean") unless $arches; +fail("unknown ocean ".errsan($o{'ocean'})) unless $arches; parse_info_serverside_ocean($o{'ocean'}); @@ -126,7 +126,7 @@ foreach my $islands (values %$arches) { die if $island_found; $island_found= $sources; } -fail("unknown island") unless $island_found; +fail("unknown island ".errsan($o{'island'})) unless $island_found; $o{'timestamp'}= must_param('timestamp', "^([1-9]\\d{1,20})\$"); fail("clock skew") if $o{'timestamp'} >= $now; -- 2.30.2